3

SharedPreferencesAndroidドキュメントで明確に述べられているように、スレッドセーフではありません:

注:現在、このクラスは複数のプロセスでの使用をサポートしていません。これは後で追加されます。

java.util.Threadsただし、共有設定に対して他の6つを起動できるアプリがcommit()あり、それらは同時に起動される可能性があります(ただし、すべてが起動される可能性は低いです)。そのため、これらの各スレッドから共有設定への参照を常に次のように取得します。

SharedPreferences prefs = getSharedPreferences(This.PREFS, Context.MODE_MULTI_PROCESS);

ただし、これによって共有設定の参照がスレッドセーフになるかどうかはわかりません。

たとえば、6つのスレッドのうち2つが起動さcommit()れて同時に呼び出された場合、一方のスレッドはもう一方のスレッドがコミットを完了するまで待機してから、独自の変更をコミットしますか、それとも完全にコミットしませんか?commit() ドキュメントの次の行は、私にはわかりにくいように聞こえます。

2人の編集者が同時に設定を変更している場合、最後にcommitを呼び出した方が優先されることに注意してください。

ここでの「勝利」とはどういう意味ですか?なぜ突然2つのスレッド間の「コンテスト」になるのですか?

2013年3月11日追加:各スレッドは、共有設定の異なるエントリを変更します。同じKey-Valueエントリを変更していません。

4

1 に答える 1

0

この回答によると、共有設定はスレッドセーフです。Androidのドキュメントによると、マルチプロセスセーフではないということです。

https://stackoverflow.com/a/4695567/855680

于 2013-04-23T08:11:20.077 に答える