我需要让我的RSS Feed阅读器每隔10分钟检查一次新帖子,然后在有新帖子的情况下解析它们。我还需要每分钟更新一次UI。
我从各种来源阅读和听到了不同的东西。我目前的理解是我可以使用ScheduledThreadPoolExecutor
制作两个预定的线程,其中一个需要Handler
来更新UI。我不确定最有效地使用这些类或TimerTask
。
我也非常不确定在哪里制作这些的子类。一位朋友建议将TimerTask
扩展为FeedParser
类中的内部类,以使其更简单。但是,要以这种方式实现它,我必须使用run()
方法TimerTask
而不覆盖它,这意味着我不能简单地使用我需要的参数来运行需要的函数。 / p>
简而言之,为此安排任务的最佳方法是什么,我将在哪里实现这些?
答案 0 :(得分: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()
}
请记住在Activity.onDestroy()中正确完成/关闭可运行的任务,希望有帮助。