2012-04-07 14 views
0

あなたは私を助けることができますか?私は間違って何をやっているAndroidの繰り返しタスクが機能しない

ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor(); 
    executor.scheduleWithFixedDelay(new Runnable(){ 

     public void run() { 
      updateList(); 
     } 

    }, updateTime, updateTime, TimeUnit.MINUTES); 

... 私はエグゼキュータとscheduledWithFixedDelayを実施したが、それは一度だけそれをしない.... そして、私は繰り返しの方法でこの作業を行うにはしたいですか?

ありがとうございます。

+0

['TimeUnit.MINUTES'はAndroidに存在しないことがあります](http://stackoverflow.com/questions/3472423/android-java-util-concurrent-timeunit-convert-milliseconds-to-minutes) –

答えて

0

これは正しい方法です。 これは、私がJavaのドキュメントで読むことができました。ここで私は驚くべき自分を見つけました。

タスクが実行されても例外が発生すると、その後の実行は抑制されます。

ScheduledExecutorService.scheduleWithFixedDelay()

実行可能でコードが実行を終了する予定エグゼキュータの原因となる例外を生成可能性がありますか?確かにあなたはそれを言いましたか?

私が言ったように、スケジュールされたExecutorが後続のタスクの実行が抑制されないように例外を処理すると思ったので、これは驚くべきことです。そしてこれは古典的なものの代わりに好まれる主な理由の1つですTimer。しかし、今私はjavadocで明らかに間違っていると思っています...

私はあまりAndroidプラットフォームに精通していませんが、多分OracleのJVMとAndroidのDalvikの間のjava.util.concurrent機能に違いがあります結局のところ、OracleのJVM javadocsは良い考えではないかもしれません。

EDIT: は確かにファクトリメソッドのJavadocは

は(この単一スレッドがシャットダウン前に実行中に発生した障害の に終了した場合、新しいものがあれば、その場所を取ることに注意してくださいと言っています後続のタスクを実行するために必要な )

Executors.newSingleThreadScheduledExecutor()

EDIT2: OracleとDalvikのJavaの文書は、ほとんど区別がつかないようです。

+0

メソッドupdateListは例外に実行できますが、可能なすべての例外はtryとcatchで処理されます。 – user1238516

+0

Runnableで非常にシンプルなロジックを試してみると、単にsystem.out.println( "ちょうど" + new Date()で実行されたようなものです。また、動作が異なるかどうかを確認するには、ScheduledExecutorService.newScheduledThreadPool(int corePoolSize)を試してみてください。 – Svilen

+0

私は今問題が何であるか知っています。私のメソッドupdateList()で私はnotifyDataSetChanged()を書きました。これは、データ内で何かが変更されたことをデータリストに「通知」する必要があります。しかし、私のコードのこのメソッドでは、 "タスク"は決して止まらないので、それは再び始まりません.... – user1238516

関連する問題