27

RSS フィード リーダーで 10 分ごとに新しい投稿がないかフィードをチェックし、新しい投稿がある場合はそれらを解析する必要があります。UI も毎分更新する必要があります。

私はさまざまな情報源からさまざまなことを読んだり聞いたりしました。私の現在の理解では、 を使用ScheduledThreadPoolExecutorして 2 つのスケジュールされたスレッドを作成でき、そのうちの 1 つはHandlerUI を更新するために必要です。これらのクラスまたはTimerTask.

また、これらのサブクラスをどこで作成するかについても非常に不確かです。ある友人は、クラスを簡単にするためTimerTaskに、クラスの内部クラスとして拡張することを提案しました。FeedParserただし、そのように実装するには、run()メソッドをTimerTaskオーバーライドせずに使用する必要があります。つまり、実行する必要がある関数に必要なパラメーターを単純に使用することはできません。

要するに、このためのタスクをスケジュールする最良の方法は何ですか?また、これらをどこに実装しますか?

4

1 に答える 1

55

私は 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() で実行可能なタスクを適切に終了/終了することを忘れないでください。

于 2011-11-12T04:08:41.370 に答える