27

我需要让我的 RSS 提要阅读器每 10 分钟检查一次提要是否有新帖子,然后在有新帖子时解析它们。我还需要大约每分钟更新一次 UI。

我从不同的渠道阅读和听到了不同的东西。我目前的理解是我可以ScheduledThreadPoolExecutor用来制作两个预定线程,其中一个需要Handler用于更新 UI。我不确定这些类或TimerTask.

我也很不确定在哪里制作这些的子类。一位朋友建议TimerTask在我的课堂上扩展为内部类FeedParser以使其更简单。但是,要以这种方式实现它,我必须使用run()for 方法TimerTask而不覆盖它,这意味着我不能简单地将所需的参数用于需要运行的函数。

简而言之,为此安排任务的最佳方式是什么,我将在哪里实施这些任务?

4

1 回答 1

55

我更喜欢使用 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() 中正确完成/关闭您的可运行任务,希望对您有所帮助。

于 2011-11-12T04:08:41.370 回答