Where do I create and use ScheduledThreadPoolExecu

2020-01-24 11:58发布

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条回答
forever°为你锁心
2楼-- · 2020-01-24 12:08

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.

查看更多
登录 后发表回答