9

ユーザーが特定の順序で移動する 3 つの異なるアクティビティがあります。私の目標は2つあります:

  1. アプリが再開されたときにユーザーが別のものに切り替えると、アプリが終了した場合でもユーザーが去ったところから開始したい
  2. 最後のアクティビティが再開されたら、最後に表示された状態に復元したい (これは、達成する方法についてかなり良い考えがあると思います)

問題は開始/停止ではないと思います-必要なものはほとんど得られますがonCreate()、アプリが終了した場合。その場合、マニフェストで構成したアクティビティが選択されます。そのデフォルトのアクティビティのメソッドに何かを入れることができると思いonCreate()ますが、見逃している可能性のあるより良い方法はありますか?

4

3 に答える 3

6

アプリが「終了」していない場合、#1 は既に機能しているはずです。#2 では、自動的に管理されない値を onSaveInstanceState() の Bundle に 保存し、それらをonRestoreInstanceState( )に復元する必要があります。

これは一種のハックですが、アプリが実際に終了した場合の#1の最良のオプションは、各ActivityクラスのonResumeに最新のActivityを保存してから、onCreateを最初に実行することだと思いますあなたの最初の活動はチェックを行い、正しい活動を開始します...おそらく最初に空の活動を入れてください。このようなもの:

開始アクティビティ:

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() で復元できます。

于 2009-09-20T08:19:38.920 に答える
1

onSaveInstanceState() は、長期的な状態では機能しないことに注意してください。つまり、ユーザーが電話の電源を切り、後で不確定な時点で再び電源を入れます。状態が電源サイクルに耐えられるようにしたい場合は、独自の長期状態メカニズムを作成する必要があります。

于 2009-09-21T15:20:41.223 に答える
0

onSaveInstanceStateを実装すると、アクティビティの現在の状態がバンドルに保存されると思います。そのバンドルはonCreateのアクティビティに渡され、それを使用して値をリセットできます。

http://developer.android.com/guide/topics/fundamentals.html#actstate

于 2009-09-20T01:59:57.520 に答える