Как повторить задачу после определенного количества времени в 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);
}
Ответы
Ответ 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);