2017-12-15 10 views
-1

私は適用とコミットの違いを知っています。 私の場合、commit()を使用したいと思いますが、アンドロイドはバックグラウンドで実行され、メインスレッドをブロックしないため、apply()を使用するように提案しています。SharedPreferences - apply()とcommit()

私がapplyを使用すると、このようなことが起こるのですか?それとも、適用前にそれを更新していない可能性がありますか?

editor.putBoolean("TEST", true) 
editor.apply() 

if (preferences.getBoolean("TEST")) { 
    //do something 
} 

答えて

7

documentationで、それは述べて、私は、それが動作するように期待:

apply()はすぐにメモリ内のSharedPreferencesへの変更をコミットしますが、非同期のディスクへのコミットを開始し、あなたがしません何らかの不具合を通知する

同じ設定オブジェクト(シングルトン)にアクセスしているので、常に一貫した表示が得られるはずです。

+1

なぜ "commit()"のような機能がありますか? –

+1

コミットは、書き込みが成功したかどうかを知る必要がある場合に便利です。この情報を使用しない場合は常にapply –

+1

'commit()'が元のAPIレベル1に存在し、 'apply()'がAPIレベル9で導入されました。 'commit()'は 'true'を返します。ディスクへの書き込み操作は成功しましたが、 'apply()'では最高の状態を期待しています。 –

2

apply()は、あとでディスクに非同期で書き込まれるMapというテンポラリに書き込みます。 getBoolean()のようなメソッドをすぐに使用すると、このキーの値が一時的なMapにある場合は最初にルックアップして戻り値を返します。

ソースコードSharedPreferencesImplを確認して、その動作を確認してください。

関連する問題