私のアプリケーションは非常に単純で、いくつかのアクティビティがあります(LoginActivity
ランチャーとメインアクティビティです)。それから私は他のいくつかの活動をし、最後にRouteActivity
サービスを開始する活動をします。
は、通知付きでLocationService
拡張Service
します。startForeground
サービスは、LocationListener
すべての新しいGPSロケーションポイントを開始して登録するだけです。サービスは正常に機能しているように見えます。通知アイコンをタッチすると、(ログインアクティビティからではなく)開始した場所からアプリケーションアクティビティに戻ります。
ここで問題が発生します。(Androidランチャーの)アプリケーションアイコンをタッチすると、アプリが右側に表示され、現在のアクティビティRouteActivity
が表示されることがありますが、約1時間後、アプリケーションアイコンをタッチすると、アプリケーションを最初から再起動するだけです。を開始しLoginActivity
ます。
しかし、サービス通知に触れると、適切なバックグラウンドアクティビティに戻ることができます。また、私のサービスは強制終了されないため、正常に機能しているように見えます。アプリケーションに関連付けられているオブジェクトと変数はまだ存在しています。
だから何 ?アプリケーションのインスタンスを2つ実行していますか?私はこれにちょっと迷っています、特にそれは時間に関連しているようです。
この「バグ」はAndroid2.Xで発生しますが、Android4.Xでは再現できません。アプリケーションを約1時間実行する必要があるため、デバッグは少し難しいです。その後、logcatに特別なメッセージはありません。
私は何かに気づきました:ActivityManagerメッセージは非常に奇妙です。通知センターのサービス通知を介してアプリケーションを起動すると、ログに記録されます。
Starting activity: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x14000000 cmp=com.wayzup.wayzupapp/com.wayzup.activity.RouteActivity bnds=[0,149][320,213]
アプリケーションアイコンを介して起動するとログに記録されますが、表示される実際のアクティビティはログインアクティビティではなく、実際にサービスを起動した実際のRouteActivityです。(約1時間後、効果的にLoginActivity
開始されます)。
Starting activity: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.wayzup.wayzupapp/com.wayzup.activity.LoginActivity bnds=[3,338][77,417]
RouteActivityを起動するたびに、このログもあります
Activity idle timeout for HistoryRecord{44e78808 com.wayzup.wayzupapp/com.wayzup.activity.RouteActivity}
これは私の他の質問に関連しています:Androidフォアグラウンドサービスはコンテキストを失います しかし、これは本当の問題であり、より正確だと思います。
必要に応じて、コードを投稿できます。