web-dev-qa-db-ja.com

アプリを閉じるときにAndroidサービスを停止する方法

ユーザーがアプリを閉じるまでサービスを継続的に実行しようとしています。

メインアクティビティのstartService()メソッドのonCreate()メソッドとstopService()メソッドのonDestroy()を使用しています。

デバイスを回転させたり、画面をオフにしたりすると、メインアクティビティが停止して再作成されるように見えるため、問題が発生しました。

ユーザーが手動でアプリを停止した場合にのみサービスを停止するにはどうすればよいですか?

25
Kamil

マニフェストファイルのサービスタグに以下の属性を設定します。

_<service Android:name="service" Android:stopWithTask="true"/>
_

これを追加すると、タスクが削除されたときにサービスのondestroy()が呼び出されます(最近のアプリリストからアプリが閉じられます)。

82
CVA

意図的にアプリを閉じるという意味です。ユーザーが「最近のアプリ」画面でアプリをスワイプした後。

Androidの観点からは、これは「アプリを閉じる」ことではありません。それは「タスクを削除する」(または「タスクを停止する」こともあります。Googleの用語はあまり一貫していません)。

タスクが削除されると、サービスは with onTaskRemoved() と呼ばれます。ただし、それは、ユーザーが概要画面(別名、最近のタスクリスト)を介して手動でタスクを削除するときと、タスクがAndroid 4.4以下で自然に消えるとき)の両方のはずです。古すぎる。

15
CommonsWare