Android - 最後に表示したアクティビティを復元する
-
11-09-2019 - |
質問
ユーザーが特定の順序で間を移動できる 3 つの異なるアクティビティがあります。私の目標は 2 つあります。
- アプリの再開時にユーザーが別のものに切り替えた場合、アプリが終了してもユーザーが離れたところから開始したい
- 最後のアクティビティが再開されたら、最後に表示した状態に復元したいと思います(これは、達成方法についてかなり良いアイデアがあると思います)
問題はそうではないと思います 起動停止 - 必要なものはほとんど手に入りますが、 onCreate()
アプリが終了した場合。その場合、マニフェストで構成したアクティビティが選択されます。何か入れても良いと思います onCreate()
そのデフォルトアクティビティのメソッドですが、おそらく私が見逃しているより良い方法はありますか?
解決
アプリが「終了」していない場合、#1 はすでに機能しているはずです。#2 は、自動的に管理されない値をバンドルに保存する必要があるだけです。 onSaveInstanceState() 次にそれらを復元します onRestoreInstanceState().
これは一種のハックですが、アプリが実際に終了した場合の #1 の最良のオプションは、最初に onCreate を実行するときに、各アクティビティ クラスの onResume に最新のアクティビティを保存することだと思います。最初のアクティビティはチェックを行ってから、正しいアクティビティを開始してください...最初に空のアクティビティを入れることもできます。このようなもの:
開始アクティビティ:
public class StartActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// get last open Activity
String lastActivity = PreferenceManager.getDefaultSharedPreferences(this).getString("last_activity", "");
if (last_activity == MyActivity2.getSimpleName()) {
startActivityForResult(new Intent(this, MyActivity2.class));
} else if (last_activity == MyActivity3.getSimpleName()) {
startActivityForResult(new Intent(this, MyActivity3.class));
} else {
// assume default activity
startActivityForResult(new Intent(this, MyActivity1.class));
}
}
public void onActivityResult() {
// kill the activity if they go "back" to here
finish();
}
}
次に、他のすべてのアクティビティ (MyActivity1、2、3) で次のように値を保存します。
@Override
public void onResume() {
Editor e = PreferenceManager.getDefaultSharedPreferences(this).edit();
e.putString("last_activity", getClass().getSimpleName());
e.commit();
super.onResume();
}
また、各アクティビティのデータの保存/復元を手動で処理する必要があります。必要なすべての値を各アクティビティの onPause() 内の設定に保存し、それを onResume() で復元できます。
他のヒント
onSaveInstanceState()は、長期状態、即ちユーザがパワーダウン電話用の実行可能でないことに注意してくださいし、その後不確定点で背面にそれを回します。あなたがパワーサイクルを生き残るためにあなたの状態をご希望の場合は、独自の長期的な状態メカニズムを作成する必要があります。
私はあなたがonSaveInstanceState実装したいと考えている、それがバンドルであなたの活動の現在の状態を保存します。そのバンドルはのonCreateであなたの活動に渡されます、そして、あなたはあなたの値をリセットするために使用することができます。
http://developer.android.com/guide/topics/fundamentals .htmlを#actstateする