2012-03-31 17 views
0

私のプログラムでインテントサービスを使用しています。インテントサービスでは、15分ごとに実行されるタイマータスクスレッドがあります。それは新しいスレッドで実行されるので、スレッド自体の内部以外で停止する方法はありません。これは私の状況では不可能です。だから、私は最初のアクティビティからインテントサービスへのタイマオブジェクトの参照を渡すことができるようにしたい。その参照を使用して、timertaskを開始または停止できますか?
これを行う方法は?アンドロイドでオブジェクトの参照をあるアクティビティから別のアクティビティに渡すことはできますか?

答えて

2

インテントサービスでは、15分ごとに実行されるタイマータスクスレッドがあります。

これは非常に悪い考えです。

まず、動作しません。 onHandleIntent()が返されるとすぐにIntentServiceがシャットダウンします。あなたが実際にやっているのはです。スレッドが漏れています。

第2に、これは常にServiceがメモリ内にとどまることを要求します。これはAndroidのアンチパターンです。

AlarmManagerを使用して、15分ごとにIntentServiceにコマンドを送信し、タイマータスクを削除してください。

これを行うことで、この種のオブジェクトをアクティビティとサービスの間に渡す心配がなくなりました。

+0

AlarmManagerは、アプリケーション自体が閉じていても機能します。また、アプリケーション自体が閉じている場合、アラームマネージャは15分ごとにバックグラウンドサービスを呼び出すことができます。 – Ashwin

+0

@Ashwin: "アプリケーション自体が閉じていてもAlarmManagerは動作しますか?" - 「閉鎖」のほとんどの従来の定義では、はい。また、アプリケーション自体が閉じている場合、アラームマネージャは15分ごとにバックグラウンドサービスを呼び出すことができます。 - それは同じ質問と思われる。 – CommonsWare

関連する問題