サービスを実行する非常に単純な Android GPS ログ アプリがあります。アクティビティは、サービスを制御するための開始/停止ボタンに他なりません。ボタンをクリックすると、新しいバックグラウンド サービスが開始されます (START_STICKY を使用)。次に、アクティビティを閉じると、サービスが正常に実行されます。アプリを再度実行してサービスを停止できます。
このサービスは、GPS 座標をファイルに記録するだけです。すべてのメソッドと例外キャッチにログインしています。ある時点で、数分または数時間でサービスが停止しますが、onDestroy は呼び出されず、例外はスローされません。ログは、最後のファイル書き込みが機能したことを示しているだけで、その後は何も表示されていません。GCがそれを殺しているのではないかと思いますが、START_STICKYは基本的に「できるだけ長く実行してください」という意味だと思いました。30 秒後、サービスの新しいコピーが開始され (異なる PID)、onCreate と onStartService が通常どおり呼び出されます。
親アクティビティまたはアプリケーションを強制終了した場合、Android はサービスを強制終了しますか? これを防ぐために、サービスを別のスレッドで実行する必要がありますか? 完全なサービス ライフサイクルが完了しないのはなぜですか (onDestroy が呼び出されない)。