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

Где я могу создать и использовать ScheduledThreadPoolExecutor, TimerTask или Handler?

Мне нужно, чтобы мой читатель RSS-ленты проверял канал каждые 10 минут для новых сообщений, а затем анализировал их, если есть новые. Мне также нужно обновлять интерфейс пользователя каждую минуту.

Я читал и слышал разные вещи из разных источников. Мое настоящее понимание заключается в том, что я могу использовать ScheduledThreadPoolExecutor для создания двух запланированных потоков, а одному из них требуется Handler для обновления пользовательского интерфейса. Я не уверен, какое наиболее эффективное использование этих классов или TimerTask.

Я также очень сомневаюсь в том, где можно создавать подклассы из них. Один из друзей предложил расширить TimerTask как внутренний класс в моем классе FeedParser, чтобы сделать его более простым. Однако, чтобы реализовать его таким образом, я должен использовать метод run() для TimerTask без его переопределения, то есть я не могу просто использовать параметры, которые мне нужны для функций, которые нужно запустить.

Короче говоря, как лучше всего планировать задачи для этого, и где бы я их реализовал?

4b9b3361

Ответ 1

Я предпочитаю использовать 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(), надеюсь, что помощь.