2012-03-20 10 views
1

私は非常に短い間隔で20〜30秒でいくつかのタスクを実行しなければならないアンドロイドアプリケーションを持っています。それは何らかの形で「監視」アプリであり、商用目的ではないため、バッテリーやデータの使用について心配する必要はありません。アプリケーションクラッシュ時にTimerTaskをキャンセルする

私はこのようなjava.util.Timerを使用してタスクをスケジュールしています:

mTimer.scheduleAtFixedRate(mUpdateDataTask,0,20000); 

私が使用して実行されたタスクを停止する方法を知っている:

mTimer.cancel(); 

と私のServiceが停止しているとき、私はこれをやっています。

問題: いくつかの点で私のアプリがクラッシュした場合は、ServiceonDestroy()メソッドが呼び出されていないとmTimerはキャンセルされることは決してありませんし、それらのタスクが実行され得続けます。アプリケーションがクラッシュしたり、設定 - >アプリケーションから強制停止されたときに、それらがキャンセルされることをどうやって確認できますか?

答えて

1

クラッシュをキャッチする方法としてUncaughtExceptionHandlerを調べる必要があります。このハンドラでタイマーをキャンセルすることができます。

0

私はtry-catchブロックでコードをラップすることをお勧めします。もしアプリケーションがクラッシュしたら、finallyブロックですべてクリーンアップしてください。

0

タスクにServiceの弱い参照が含まれていて、実行されるたびにServiceが有効かどうかを確認することもできます。最も良い解決策ではないが動作するかもしれない;)

関連する問題