Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/182.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在哪里创建和使用ScheduledThreadPoolExecutor、TimerTask或Handler?_Android_Handler_Threadpool_Timertask_Scheduledexecutorservice - Fatal编程技术网

Android 在哪里创建和使用ScheduledThreadPoolExecutor、TimerTask或Handler?

Android 在哪里创建和使用ScheduledThreadPoolExecutor、TimerTask或Handler?,android,handler,threadpool,timertask,scheduledexecutorservice,Android,Handler,Threadpool,Timertask,Scheduledexecutorservice,我需要让我的RSS提要阅读器每10分钟检查一次提要,查看是否有新的帖子,然后如果有新帖子,就解析它们。我还需要每分钟更新一次UI 我从各种渠道读到和听到了不同的东西。我目前的理解是,我可以使用ScheduledThreadPoolExecutor创建两个调度线程,其中一个线程需要处理程序来更新UI。我不确定这些类或TimerTask的最有效使用是什么 我也非常不确定在哪里创建这些子类。一位朋友建议将TimerTask扩展为我的FeedParser类中的一个内部类,以使其更简单。然而,要以这种方式

我需要让我的RSS提要阅读器每10分钟检查一次提要,查看是否有新的帖子,然后如果有新帖子,就解析它们。我还需要每分钟更新一次UI

我从各种渠道读到和听到了不同的东西。我目前的理解是,我可以使用
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
)。