我在哪里创建和使用ScheduledThreadPoolExecutor,TimerTask或Handler?

zr0*_*r00 25 android handler threadpool timertask scheduledexecutorservice

我需要让我的RSS Feed阅读器每隔10分钟检查一次新帖子,然后在有新帖子的情况下解析它们.我还需要每分钟都更新UI.

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

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

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

yor*_*rkw 53

我更喜欢使用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()
}
Run Code Online (Sandbox Code Playgroud)

记得在Activity.onDestroy()中正确完成/关闭可运行的任务,希望有所帮助.

  • 非常有用的答案,你如何"正确地完成/关闭你的可运行任务"我发现的所有例子都使用了一个处理程序/计时器来完成这个并删除了回调.有人知道ScheduledThreadPoolExecutor的过程吗? (4认同)
  • 正如您所说,ScheduledThreadPoolExecutor是一个ScheduledExecutorService,使用它完全取决于您. (2认同)