3

Androidアプリケーションに、ユーザーがアプリケーションを終了した後も位置情報の更新をリッスンし続ける必要があるサービスがあります(これがバッテリー寿命に与える影響は別の問題です)。

このページで概説されているAndroidのサービスのライフサイクルを正しく理解したかどうかはわかりません。

http://developer.android.com/reference/android/app/Service.html

onStart()メソッドでSTART_STICKYを返すと、サービスが独自のプロセスで実行されているかどうかに関係なく、メインアプリケーションが終了した後もサービスは実行され続けると思います。サービスがアプリの他の部分と同じプロセスで実行されていて、私が正しく理解している場合、メインアプリのプロセスは、アプリが終了した後も、そのサービスを実行するためだけに存続します。アプリを再起動すると、まだ実行中のサービスと同じプロセスで実行されます。システムのメモリが少なくなると、Androidはこのサービスを終了することを決定する場合があります。

次に、GPSの更新をリッスンしているロケーションリスナーを、アプリケーションの他の部分と同じプロセスで実際に同じスレッドで実行しても問題ないと思います。GPSからの更新を待っているときにブロックされることはありません。

私は正しく理解しましたか?

4

2 に答える 2

4

あなたは正しく理解しました。

システムのメモリが少なくなると、Androidはこのサービスを終了することを決定する場合があります。

永続的にしたい場合は、永続的なサービスを作成できます(ただし、システムアプリ/サービスである必要があります)。

意味のある作業を行っている場合を除いて、サービスがメモリ内にある必要がないように、AlarmManagerとIntentServiceを使用してください。これはまた、Androidがメモリ内にいる間にサービスを強制終了する可能性が低く、ユーザーがメモリを浪費していると考えてサービスを強制終了する可能性が低いことも意味します。

あなたの場所のリスナーのために:

サービスに実装されているロケーションリスナーを使用します。

サービスの開始時にGPSのリスニングを開始し、サービスの停止時にGPSリスナーを削除します。

GPSを聞きたいときにこのサービスを開始します(たとえば、10分ごと)。

これは、継続的に実行しようとするサービスを使用して場所の変更を確認するよりもクリーンです。

次に、GPSの更新をリッスンしているロケーションリスナーを、アプリケーションの他の部分と同じプロセスで実際に同じスレッドで実行しても問題ないと思います。GPSからの更新を待っているときにブロックされることはありません。

このためにAsyncTaskまたはバックグラウンドスレッドを設定する必要はありません。また、正しく理解されています。

于 2013-02-12T15:14:07.507 に答える
1

サービスの実際のライフサイクルは、ここに画像で示されています。常にこのように従う場合は、Androidのライフサイクルで任意のサービスを実行します。

ここに画像の説明を入力してください

于 2015-04-30T07:28:46.627 に答える