起動時に画面をオンにする必要があるアクティビティがあります(画面がオフになった場合に備えて)。だから私の中onCreate
で、私は持っています:
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD
|WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
|WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
|WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
この単純な組み合わせを使用すると、バックグラウンドサービスから開始するたびにアクティビティを表示させることができます(はい、これは正当なケースです)。
ただし、このような場合にアクティビティを開始すると、ライフサイクルの動作が非常に奇妙になるという問題があります。広範なログを使用して、アクティビティが開始された直後に次の7ステップのプロセスが発生することを理解できました。
- onCreate
- onStart
- onResume
- onPause
- onStop
- onStart
- onResume
分かりますか?単純なアクティビティ開始の場合、onStartが2回呼び出されます。さらに重要なことに、アクティビティが開始されたばかりであるにもかかわらず、onStopが不思議なことに呼び出され、停止する原因となるようなことは何も起こりませんでした。
これをさまざまなシナリオでテストしましたが、この奇妙な動作は、画面がオフになっていて、アクティビティが破棄された後に起動された場合にのみ発生するようです。画面がオンの場合、またはアクティビティが停止した[ただしまだ破棄されていない]場合、アクティビティは正常に起動し、onStartは1回だけ呼び出されます。
結論:アクティビティが起動されて画面が強制的にオンになると、Androidはアクティビティを開始し、停止してから、明らかな理由もなく再開するようです。
だから:なぜこれが起こっているのですか?そして、これを回避するために私ができることはありますか(それが正当な理由があるまでonStopが呼び出されないようにするため)?
ノート:
singleTask
問題のアクティビティはlaunchmodeを使用しています- キーガード/ロックを無効にしてみましたが、効果がありません
- 私はAndroid3.2を実行しているSamsungGalaxyTab10.1でこの動作を目撃しています。これが他に当てはまるかどうかはテストしていません...