хороший способ проверить, работает ли таймер повторно - PullRequest
0 голосов
/ 31 января 2019

Я работаю над React Native и хочу создать бесконечный сервис, который будет запускаться каждые (n) секунды на собственных модулях (в этой теме Android).

Я создал простой сервискак этот

public void startTimer() {
    timer = new Timer();
    timer.scheduleAtFixedRate(new TimerTask() {
      public void run() {
        Log.v(TAG, "SERVICE RUN");
        try{
          if(haveNetworkConnection()){
            db.openDB();
            if(db.countRowNewStructure()>0){
              //send data to server
            } else{
              Log.v(TAG, "No data should be send to server");
            }
          } else {
            Log.v(TAG, "Ga ada sinyal");
          }
        } catch (JSONException e){
          e.printStackTrace();
        }
      }
    }, 0, 1000);
  }

приведенный выше код запускается каждую секунду для проверки, но я сталкиваюсь с проблемой, когда перезапускаю службу из React Native, журнал показывает мне этот код каждые 0,5 секунды

симуляция может выглядеть следующим образом:

0----------------1 //seconds
startTimer()
        re-run startTimer() conscious
        0----------------1 //seconds
        startTimer()

//now i have two startTimer() that will run every 1 sec on different interval

Я хочу, чтобы мой startTimer () работал только один раз, даже когда я запускаю startService() каждые 0,5 секунды.

как я могу это сделать?это возможно?

Ответы [ 2 ]

0 голосов
/ 06 февраля 2019

Вы можете использовать метод cancel для отмены предыдущего Timer.

public class YourModule extends ReactContextBaseJavaModule {
   Timer tim = new Timer();

   public void startTimer() {
    tim.cancel();
    tim = new Timer();
    tim.scheduleAtFixedRate(
        new TimerTask() {
          public void run() {
            // Run tasks
          }
        },
        0,
        1000);
  }


}
0 голосов
/ 31 января 2019

это может вам помочь.Тиммер для выполнения определенного действия в Android после определенного времени.

  final Handler handler = new Handler();
         Timer timer = new Timer();
         TimerTask timertaskforsynctime = new TimerTask() {
          @Override
          public void run() {
            handler.post(new Runnable() {
                @Override
                public void run() {
               // your action here    

                }
            });
        }
    };
    timer.schedule(timertaskforsynctime,5000,10000);// decide the time when it will start and after how much time it will run continusly.

}`

за один раз

new Handler().postDelayed(new Runnable(){
        @Override
        public void run() {
          // your code that will run after 1 sec
        }
    }, 1000);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...