Где я могу создать и использовать ScheduledThreadPoolExecutor, TimerTask или Handler?
Мне нужно, чтобы мой читатель RSS-каналов проверял фид каждые 10 минут для новых сообщений, а затем анализировал их, если есть новые. Мне также нужно обновлять интерфейс пользователя каждую минуту.
Я читал и слышал разные вещи из разных источников. Мое настоящее понимание заключается в том, что я могу использовать ScheduledThreadPoolExecutor
для создания двух запланированных streamов, а одному из них нужен Handler
для обновления пользовательского интерфейса. Я не уверен, какое наиболее эффективное использование этих classов или TimerTask
.
Я также очень сомневаюсь в том, где можно сделать подclassы из них. Один из друзей предложил расширить TimerTask
как внутренний class в моем classе FeedParser
чтобы упростить его. Однако, чтобы реализовать его таким образом, я должен использовать метод run()
для TimerTask
без переопределения его, то есть я не могу просто использовать параметры, которые мне нужны для функций, которые нужно запустить.
- Как выполнять задачу Async повторно после фиксированных интервалов времени
- Как выполнять определенную задачу каждый день в определенное время с помощью ScheduledExecutorService?
- Запуск Android-сервиса каждые 5 минут
- TimerTask vs Thread.sleep vs Handler postDelayed - наиболее точная функция вызова каждые N миллисекундов?
Короче говоря, каков наилучший способ запланировать выполнение задач для этого, и где бы я их реализовать?
Я предпочитаю использовать ScheduledThreadPoolExecutor. Как правило, если я правильно понимаю ваши требования, все это может быть реализовано в вашей деятельности, TimerTask и Handler не нужны, см. Пример кода ниже:
public class MyActivity extends Activity { private ScheduledExecutorService scheduleTaskExecutor; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); scheduleTaskExecutor= Executors.newScheduledThreadPool(5); // This schedule a task to run every 10 minutes: scheduleTaskExecutor.scheduleAtFixedRate(new Runnable() { public void run() { // Parsing RSS feed: myFeedParser.doSomething(); // If you need update UI, simply do this: runOnUiThread(new Runnable() { public void run() { // update your UI component here. myTextView.setText("refreshed"); } }); } }, 0, 10, TimeUnit.MINUTES); } // end of onCreate() }
Не забудьте закончить / закрыть свою выполнимую задачу должным образом в Activity.onDestroy (), надеюсь, что это поможет.