Подтвердить что ты не робот

Как повторить задачу после определенного количества времени в android?

Я хочу многократно вызывать метод через каждые 5 секунд, и всякий раз, когда я хочу остановить повторный вызов метода, я могу остановить или перезапустить повторный вызов метода.

Вот пример кода, который я действительно хочу реализовать. Пожалуйста, помогите мне в этом отношении, я буду очень благодарен вам.

private int m_interval = 5000; // 5 seconds by default, can be changed later
private Handler m_handler;

@Override
protected void onCreate(Bundle bundle)
{
  ...
  m_handler = new Handler();
}

Runnable m_statusChecker = new Runnable()
{
     @Override 
     public void run() {
          updateStatus(); //this function can change value of m_interval.
          m_handler.postDelayed(m_statusChecker, m_interval);
     }
};

public void startRepeatingTask()
{
    m_statusChecker.run(); 
}

public void stopRepeatingTask()
{
    m_handler.removeCallbacks(m_statusChecker);
}  
4b9b3361

Ответ 1

Задайте повторяющуюся задачу следующим образом:

//Declare the timer
Timer t = new Timer();
//Set the schedule function and rate
t.scheduleAtFixedRate(new TimerTask() {

    @Override
    public void run() {
        //Called each time when 1000 milliseconds (1 second) (the period parameter)
    }

},
//Set how long before to start calling the TimerTask (in milliseconds)
0,
//Set the amount of time between each execution (in milliseconds)
1000);

и если вы хотите отменить задачу, просто вызовите t.cancel() здесь t - ваш объект Timer

и вы также можете проверить комментарий, помещенный под вашим ответом, они предоставили краткую информацию об этом.

Ответ 2

Используйте Handler в методе onCreate(). Его метод postDelayed() вызывает добавление Runnable в очередь сообщений и запуск по истечении указанного количества времени (то есть 0 в данном примере). Затем это будет стоять в очереди после фиксированной скорости времени (1000 миллисекунд в этом примере).

Обратитесь к этому коду:

public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    android.os.Handler customHandler = new android.os.Handler();
    customHandler.postDelayed(updateTimerThread, 0);
}

private Runnable updateTimerThread = new Runnable()
{
    public void run()
    {
        //write here whaterver you want to repeat
        customHandler.postDelayed(this, 1000);
    }
};

Ответ 3

использовать TimerTask для вызова через определенный промежуток времени

    Timer timer = new Timer();
    timer.schedule(new UpdateTimeTask(),1, TimeInterval);

и

  class UpdateTimeTask extends TimerTask {

        public void run() 
           {        
            // do stufff
           }

        }

Ответ 4

Сделайте это в Android-режиме с помощью Handler.

Объявить обработчик, который не выполняет утечку памяти

/**
     * Instances of static inner classes do not hold an implicit
     * reference to their outer class.
     */
    private static class NonLeakyHandler extends Handler {
        private final WeakReference<FlashActivity> mActivity;

        public NonLeakyHandler(FlashActivity activity) {
            mActivity = new WeakReference<FlashActivity>(activity);
        }

        @Override
        public void handleMessage(Message msg) {
            FlashActivity activity = mActivity.get();
            if (activity != null) {
                // ...
            }
        }
    }

Объявить runnable, который обрабатывает вашу задачу

   private Runnable repeatativeTaskRunnable = new Runnable() {
        public void run() {
            new Handler(getMainLooper()).post(new Runnable() {
                @Override
                public void run() {

         //DO YOUR THINGS
        }
    };

Инициализировать объект обработчика в вашем Activity/Fragment

//Task Handler
private Handler taskHandler = new NonLeakyHandler(FlashActivity.this);

Повторить задание после интервала времени исправления

taskHandler.postDelayed(repeatativeTaskRunnable, DELAY_MILLIS);

Остановить повторение

taskHandler.removeCallbacks(repeatativeTaskRunnable);