ストーリーショート:私は現在、小さなアンドロイドのゲームに取り組んでいます。 1つの機能は、アプリのテーマを変更することができます。ユーザーがテーマを変更すると、イベントがアプリケーション全体にブロードキャストされ、すべてのアクティブなアクティビティはrecreate()を呼び出して新しいテーマを適用します。スタックから再作成されたアクティビティを再開するときに、アクティビティonStart()が呼び出されない
問題: はの活動の積み重ねがあるとしましょう:A)は、B、Cのすべての活動は、それらが開かれた順にイベントを受け取ることになりますし、(再作成を呼び出します。
- 活動AはonDestroy()、のonCreate()、ONSTART()、onResume()とonPause()を
- アクティビティBを呼び出します呼び出します。これらは、(順番に)呼び出されますライフサイクルイベントです
- アクティビティCは、onPause()、onStop()、onDestroy()、onCreate()、onStart()、onResume()を呼び出します。
アクティビティAまたはBはどちらもonStop()を呼び出さなかったことに注意してください。 これらのアクティビティが返されているとき(例えば、戻るボタンの押下)は、と表示されたときにonStart()を呼び出さず、onResume()を呼び出します。これは、アクティビティライフサイクルのドキュメントに記載されている内容とは異なります。
質問:私がここで間違っていることはありますか?アクティビティのライフサイクルを邪魔することなく、アプリケーション内のすべてのアクティビティを再起動する別の方法はありますか?
ここでEventBusを使用している再作成イベントは、各アクティビティごとにonCreate()とonDestroy()の間にのみ登録されるため、そこには問題はありません。 startActivityForResult()/ onResume()の方法では、テーマが変更された場合に再開された各アクティビティに対して醜いフリッカーが発生し、そのことを回避しようとしています。また、私が使用しているアクティビティのrecreate()メソッドは、API 11で追加された公開コールです。 –
私の回答を編集しました。このアプローチではEventBusを使用しても避けています。そして、あなたは "醜いちらつき"をテストしましたか?私は "はい"と仮定しています - もしそうなら、これを扱うアニメーションや別のアプローチを考慮する必要があります。たぶんその質問をここに投稿しますか?アクティビティが表示されていない間に "onStart"または "onResume"を呼び出さないでください。これは問題の一部である可能性がありますが、推測に過ぎません。 – Jim
私は少し質問が間違っていると思います。私はこれらのライフサイクルメソッドを呼び出すとは言いませんでした。私はこれらのメソッドがosによって呼び出されていると言って、そのアクティビティが表示されていなくてもonStop()が呼び出されないことを指摘して、その順序を列挙しました。私は、publicメソッドrecreate()を使用して、アクティビティレクリエーションをトリガーしています。この方法は次のとおりです。http://developer.android.com/reference/android/app/Activity.html#recreate%28%29 –