質問: Androidアプリを作成しております。 自分の作ったアプリを起動させ、しばしアプリを扱った後に、 ホームボタンを押し、まったく別のアプリを起動させます。 その後に、自分のアプリをまた起動させます。 (タスクからではなく、ホームから) その時に、タスクからの復帰のように、前の状態からスタートするにはどうしたらいいでしょうか? 例えば、すべてのactivitiのonDestroyなどに状態保存のロジックをいれこんでおき、前はどこで終了したかを保存しておくなどのロジックが必要なのでしょうか?
回答: > > 自分の作ったアプリを起動させ、しばしアプリを扱った後に、 > > ホームボタンを押し、まったく別のアプリを起動させます。 > > > ですが、結論から言えば「自力でActivityの状態を保持/復元する必要がある」になります。 ホームボタンを押してホーム画面に戻ると、アプリは休止中の扱いになりますが、休止中の アプリはOSによるGC対象になりうるため、アプリを殺される前の状態を保持しておきたい場合は、 明示的に状態保存を行っておく必要があります。 EditTextの入力値などは onSaveInstanceState(Bundle) や onRestoreInstanceState(Bundle) で 保存/復元できますが、これも「何を保存/復元するか」は自分で決める必要があります。 ただし、アプリがOSにより完全に殺されてしまった場合は、内容の復元は保証できません。 そんな場合でも状態の復元を行いたい、ということであれば、上記に加えonPause() で 情報の永続化を行い、 onResume() でそれを復元する、といった処理も併用する 必要があると考えます。 ActivityとFragmentのライフサイクルは、 TechBooster さんのサイトでとても分かりやすい 図を公開してくださっているので、参考にしてみてください。 なお、逆に「ランチャーから起動したときは、常に最初からにしたい」という場合は、ランチャー起動 させるActivityに android:clearTaskOnLaunch="true" を追加してみてください。