11

起動時に画面をオンにする必要があるアクティビティがあります(画面がオフになった場合に備えて)。だから私の中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ステップのプロセスが発生することを理解できました。

  1. onCreate
  2. onStart
  3. onResume
  4. onPause
  5. onStop
  6. onStart
  7. onResume

分かりますか?単純なアクティビティ開始の場合、onStartが2回呼び出されます。さらに重要なことに、アクティビティが開始されたばかりであるにもかかわらず、onStopが不思議なことに呼び出され、停止する原因となるようなことは何も起こりませんでした。

これをさまざまなシナリオでテストしましたが、この奇妙な動作は、画面がオフになっていて、アクティビティが破棄された後に起動された場合にのみ発生するようです。画面がオンの場合、またはアクティビティが停止した[ただしまだ破棄されていない]場合、アクティビティは正常に起動し、onStartは1回だけ呼び出されます。

結論:アクティビティが起動されて画面が強制的にオンになると、Androidはアクティビティを開始し、停止してから、明らかな理由もなく再開するようです。

だから:なぜこれが起こっているのですか?そして、これを回避するために私ができることはありますか(それが正当な理由があるまでonStopが呼び出されないようにするため)?


ノート:

  • singleTask問題のアクティビティはlaunchmodeを使用しています
  • キーガード/ロックを無効にしてみましたが、効果がありません
  • 私はAndroid3.2を実行しているSamsungGalaxyTab10.1でこの動作を目撃しています。これが他に当てはまるかどうかはテストしていません...
4

3 に答える 3

2

ここでも同様の問題がありました: アクティビティ ライフサイクル X 電源ボタン X ロック画面

問題は、アクティビティが強制的に横向きになったため、画面をオンにするとロック画面が縦向きに表示され、構成が変更され、現在のアクティビティが破壊されていたことです。

解決策は、AndroidManifest.xml のアクティビティに android:configChanges="orientation" を追加することでした。

于 2012-08-01T16:35:29.000 に答える
-2

で状況を確認しonStart、静的変数またはグローバル変数を設定してから、変数をチェックインしonStopて標準の動作をオーバーライドできます。

于 2012-05-31T07:17:27.750 に答える