0

2 つのアクティビティがあります。2 番目のアクティビティでは、エディターを使用して共有設定に文字列を入力し、コミットします。

2番目のアクティビティから1番目のアクティビティに戻って、文字列が表示されないことを確認します。

しかし、アプリを強制終了/終了してアプリを再度実行すると、最初のアクティビティの文字列が表示されます。

私の質問: SharedPreferences はこのように機能しますか?

2番目のアクティビティで新しい値に更新した後でも、以前の値が返されるためです。

最初のアクティビティには、文字列を表示するためだけの 2 つのテキストビューがあります。

2 番目のアクティビティで 2 つの文字列を入力し、保存して最初のfinish();アクティビティに戻ります

メソッド i の最初のアクティビティはOncreate、共有設定を取得して表示します

1st から 2nd への 2nd アクティビティに移動するときは、finish(); 最初の活動;

まだ新しい値は表示されていませんが、アプリを再度開いた後にのみ表示されます。

4

2 に答える 2

2

SharedPreferences に関するコードは機能すると思います。そうしないと、アプリを強制終了した後に同じ文字列が再び表示されないためです。

データを読み込んで設定に書き込むのは、まさにその瞬間です。アクティビティを残す場合 onPause は、データを設定に書き込む場所のコールバックです。これは、ライフサイクルで起動されると期待できる最後のコールバックであるためです。システムがアクティビティも強制終了する可能性があり、onDestroy が呼び出されない可能性があることを考慮する必要があるためです。

環境設定から読み取るには、デフォルトのオプションとして onResume を使用する必要があります。あなたの場合、 onStart も機能すると思います。しかし、全体的には onResume が最適です。

このようにして、常に適切に書き込み/読み取りを行い、アクティビティには常に最新のデータが表示されます。

于 2013-09-15T12:37:49.017 に答える
2

更新された値を確認するためにアプリを閉じる必要はありませんか?

いいえ、ただし:

  • 最初のアクティビティで、確実SharedPreferencesに呼び出されるライフサイクル メソッド (例: onResume()) を使用するか、OnSharedPreferenceChangeListener

  • 両方のアクティビティを同じプロセスに含める必要があります (つまり、android:processマニフェストから属性を削除します)。

このサンプル プロジェクトは、あるアクティビティで設定を編集し、別のアクティビティでそれらを表示する方法を示しています。

于 2013-09-15T12:38:02.450 に答える