7

私はAndroid開発にかなり慣れていないので、アクティビティの状態を保存するためのサポートが必要です。たとえば、AndroidはonCreateやonSaveInstanceStateの場合のように、savedInstanceStateバンドルを送信しないため、onPauseからインスタンスを保存してonRestoreから復元する正しい方法は何ですか。または、savedInstanceStateバンドルを使用する以外に保存するためのより良い方法はありますか?

これは意味がありますか?

[編集]わかりました、私は私の本当の問題が何であるかを知っていると思います...しかし、最初に、私が探していたのは、savedInstanceStateの代わりにSharedPreferencesを使用することだったと思います。

したがって、デバッグログの監視をさらに行うと、アクティビティをスタックの一番上に移動する代わりに、新しいアクティビティを作成していることに気付きます。はい、新しいものを作成していることに気づきました。

         Intent itemintent = new Intent(MediaList.this, AudioPlayer.class);

         Bundle b = new Bundle();
        //...putString some strings to send
         itemintent.putExtra("android.intent.extra.INTENT", b);
         itemintent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
         startActivityForResult(itemintent,0);

...しかし、FLAG_ACTIVITY_REORDER_TO_FRONTは、新しいアクティビティの作成を停止することになっているのではありませんか?いくつかの文字列を送信しているので、新しいものを作成する必要があると思いますか?

さらに良いことに、文字列が同じである限り、アクティビティがすでにスタックにあるかどうかを確認し、それに切り替えるにはどうすればよいですか?-ユーザーがリストビューからメディアアイテムをクリックしたときに、このアクティビティを開始します。[/編集]

4

2 に答える 2

3

何らかの理由で、これは非常に大胆なネオンの点滅文字で文書化されておらず、発見するのに時間がかかりましたが、android:launchMode = [で作成するだけで、アクティビティが存在するかどうかを心配する必要はありません。 「複数」| 「singleTop」| 「singleTask」| 「singleInstance」]プロパティが「singleInstance」に設定されています。

その場合、そのインスタンスは1つだけになり、アクティビティがガベージコレクションされていない限り、メモリフィールドは保持されます。

他にできることは、アプリケーション(アプリケーションから拡張)を作成し、その中にすべての永続オブジェクトを保存することです...アプリのライフサイクル全体(すべてのアクティビティを含む)に関する限り、最初に作成され、最後に破棄されます-サービスが少ない)。

Applicationクラスを作成し、マニフェストで次のように指定するだけです。

<application android:icon="@drawable/icon" android:label="@string/app_name"
    android:name=".MyApplication">

それでも、アプリが閉じられる状況で値を保存したい場合は、SharedPreferencesを使用してください。

于 2011-04-26T01:17:55.600 に答える
1

onRestoreあなたが話すこの方法は何ですか?それはアクティビティライフサイクルの一部ではありません...私はあなたが意味すると思いますonRestart。とにかく、バンドルを取得しない理由は、バンドルがonRestart必要ないためです。アクティビティは正式に「強制終了」されていないため、保存された状態から復元する必要はありません。アクティビティは一時停止されましたが、メモリから削除されなかったため、システムはアクティビティが再び表示されたことを通知しているだけです。この種の移行イベントでは、おそらく何もする必要はありません。

それ以外の方法は、「状態」の値と見なすものをすべてに保存してからonSaveInstanceState()、に復元することですonCreate。その後、ビュー固有のプロパティをonCreateそれ自体で復元することも、アクティビティライフサイクルの後半で復元することもできます(例onResume)。

于 2011-04-25T23:32:46.453 に答える