Where do I create and use ScheduledThreadPoolExecutor, TimerTask, or Handler?

こ雲淡風輕ζ 提交于 2019-11-26 06:31:20

问题


I need to make my RSS Feed reader check the feed every 10 minutes for new posts, and then parse them if there are new ones. I also need to update the UI about every minute.

I have read and heard different things from various sources. My current understanding is that I can use ScheduledThreadPoolExecutor to make two scheduled threads, and one of them needs a Handler for updating the UI. I am unsure about what the most efficient use of these classes or TimerTask.

I am also very uncertain about where to make subclasses of these. One friend suggested extending TimerTask as an inner class in my FeedParser class to make it simpler. However, to implement it in that way, I have to use the run() method for TimerTask without overriding it, meaning I can\'t simply use the parameters I need for the functions that need to run.

In short, what is the best way to schedule the tasks for this, and where would I implement these?


回答1:


I prefer to use ScheduledThreadPoolExecutor. Generally, if I understand your requirements correctly, all these can be implemented in your activity, TimerTask and Handler are not needed, see sample code below:

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()
}

Remember to finish/close your runnable task properly in Activity.onDestroy(), hope that help.



来源:https://stackoverflow.com/questions/8098806/where-do-i-create-and-use-scheduledthreadpoolexecutor-timertask-or-handler

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!