2

罪の意識を持って最後に残したライフサイクルを除けば、完全なアプリがあります。物事はすべての場合にうまくいくようですが、1つ:

  • 電源ボタンを押してアプリを一時停止すると、再開時に正しく一時停止して再起動します。
  • 画面を回転させると、正しくサイズ変更されます。
  • 一時停止してから画面を回転させると、動作が異なり、アプリがリセットされます。

さて、これは明らかに私の内部コードの問題ですが、デバッグを支援するために、3つのライフサイクルの違いを理解したいと思います。または、3番目の例が最初の2つと多少異なる場合はさらに良いでしょう。

デバッグを行ったところ、3つすべてがこれを実行していることがわかりました(私は心の中で似ていますが、正しいことを望んでいます)。

  • onSaveInstanceState()
  • onPause()
  • onStop()
  • onStart()
  • onResume()

正しいですか?または、上記の3番目の例のライフサイクルステップを見逃していませんか?

ありがとうございました。

4

3 に答える 3

3

アプリのリセットの意味を指定してください。

電源ボタンを押すと、アプリが停止する可能性があります。そのため、アプリを停止した(一時停止onStart()はない)後に呼び出されることがあります。

それを考えると、あなたが説明する3番目のシナリオが最初の2つの組み合わせであるというのは本当ですか?つまり、 3番目のシナリオでアプリを一時停止するにはどうすればよいですか?

コメントに関する更新:アクティビティの停止とアクティビティの破棄には違いがあります。

ローテーションは構成の変更です。このシナリオでは、アクティビティが破棄されて再作成されます。onRetainNonConfigurationInstance()コールバックとメソッドを介して必要な場合(状況によって異なります)、このケースを個別に処理できますgetLastNonConfigurationInstance()。Android、、、をこの順序で呼び出しonPause()、次にetcを続行します。その間、イベントは処理されないため、イベントが失われることはありません。onStop()onRetainNonConfigurationInstance()onDestroy()onCreate()

ほとんどの場合、コードの一部が間違ったコールバックに配置されているため、3番目のシナリオでは、何かが初期化/添付されません/ ...これは、コード例外(例外の場合)なしではわかりません。 )。

次のように進めることをお勧めします。

  • ライフサイクルの理解を完了し、正確に(作成、開始、再開、再開、一時停止、停止、破棄)
  • コードを完成させて、他のライフサイクルコールバックもログメッセージでオーバーライドし(スーパークラスのコールバックを呼び出すことを忘れないでください)、一時停止、停止、ローテーション、および組み合わせを分析します
  • クラッシュのポイントを特定する
  • アクティビティライフサイクルと併せて、クラッシュに関係するオブジェクトのライフサイクルを分析します

または、もちろん、ここにいくつかのコードと例外を投稿することもできます。

アップデート2AVDでテストを行いました。私は次のことを観察しました:

AVDが横向きで、電源ボタンを押すと、アプリは縦向きへの構成変更を受け取ります(おそらく、縦向きのみのロック画面が引き継ぐためです)。もう一度電源を入れてAVDのロックを解除すると、アプリは構成の変更を再び横向きに戻します。

問題を解決していませんが、コードをそれぞれのコールバックに慎重に配置する必要があることを示しています。上記の場合、再作成されている間、アクティビティは表示されないためです。

質問を更新する場合は、コメントを送ってください。

于 2013-03-06T09:05:09.457 に答える
1

こんにちは、Androidでのアクティビティライフサイクルの管理に関するドキュメントを確認できます。

于 2013-03-06T08:58:32.160 に答える
0

向きが変わると、アクティビティが再作成されます。

マニフェストでandroid:configChanges="keyboardHidden|orientation"あなたに追加します。activity

于 2013-03-06T09:00:17.087 に答える