1

に次のAndroidサービスがある場合onStartCommand

MyWidgetUpdater updater = new MyWidgetUpdater();
updater.updateWidgets(...);

バックグラウンドスレッドでデータを取得してから、updaterフォアグラウンドスレッドでウィジェットを更新します。stopSelf()バックグラウンド処理が完了する前にサービスが停止した場合(たとえば)はどうなりますか?これにより、ウィジェットが更新を完了しないことがありますか(スレッドが強制終了された可能性があるため)?もしそうなら、すべてのウィジェットがいつ更新を完了し、サービスを安全に停止できるかを知るためのデザインパターンはありますか?

4

1 に答える 1

3

バックグラウンド処理が完了する前にサービスが停止するとどうなりますか (例: stopSelf())。

これが自分で分岐したスレッドであると仮定すると、Android はそのスレッドを認識せず、Android がプロセスを終了するまで実行を続け、リークします。

もしそうなら、すべてのウィジェットがいつ更新を完了し、サービスを安全に停止できるかを知るための設計パターンはありますか?

stopSelf()仕事が終わるまで電話しない。どこで を呼び出しているのかわかりませんがstopSelf()、引用しているパターンでは、通常、そのスレッドの最後で行われます。

IntentServiceこれがが人気がある理由の 1 つです。すべてのスレッドやその他の処理を処理しstopSelf()てくれるからです。

于 2012-10-17T22:31:22.987 に答える