Android 在哪里创建和使用ScheduledThreadPoolExecutor、TimerTask或Handler?
我需要让我的RSS提要阅读器每10分钟检查一次提要,查看是否有新的帖子,然后如果有新帖子,就解析它们。我还需要每分钟更新一次UI 我从各种渠道读到和听到了不同的东西。我目前的理解是,我可以使用Android 在哪里创建和使用ScheduledThreadPoolExecutor、TimerTask或Handler?,android,handler,threadpool,timertask,scheduledexecutorservice,Android,Handler,Threadpool,Timertask,Scheduledexecutorservice,我需要让我的RSS提要阅读器每10分钟检查一次提要,查看是否有新的帖子,然后如果有新帖子,就解析它们。我还需要每分钟更新一次UI 我从各种渠道读到和听到了不同的东西。我目前的理解是,我可以使用ScheduledThreadPoolExecutor创建两个调度线程,其中一个线程需要处理程序来更新UI。我不确定这些类或TimerTask的最有效使用是什么 我也非常不确定在哪里创建这些子类。一位朋友建议将TimerTask扩展为我的FeedParser类中的一个内部类,以使其更简单。然而,要以这种方式
ScheduledThreadPoolExecutor
创建两个调度线程,其中一个线程需要处理程序来更新UI。我不确定这些类或TimerTask
的最有效使用是什么
我也非常不确定在哪里创建这些子类。一位朋友建议将TimerTask
扩展为我的FeedParser
类中的一个内部类,以使其更简单。然而,要以这种方式实现它,我必须对TimerTask
使用run()
简言之,为此计划任务的最佳方式是什么,我将在哪里实现这些任务?我更喜欢使用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()中正确完成/关闭您的可运行任务,希望有帮助。因此,是否更倾向于实际使用ScheduledExecutorService
而不是ScheduledThreadPoolExecutor
,后者是前者的子类?或者只是因为我不需要在ScheduledThreadPoolExecutor中添加内容?正如您所说,ScheduledThreadPoolExecutor是ScheduledExecutor服务,使用哪种服务完全取决于您。非常有用的回答,您如何“正确完成/关闭可运行任务”我发现的所有示例都使用了处理程序/计时器来完成此操作并移除回调。有人知道ScheduledThreadPoolExecutor的流程吗?我正在为一个周期性任务尝试这个方法,但它似乎不起作用。非常感谢您的回答,对我有效。只有一个问题,是否可以在onPause()
中暂停UI更新,以避免排队等待大量UI更新(在我的例子中是alertDialog
)。