錯誤代碼
SharedPreferences pref = getPreferences(MODE_WORLD_WRITEABLE);
pref.edit().putString("key", "value");
pref.edit().commit(); // 錯誤:每次 edit() 返回新 Editor,第一次修改丟失
正確寫法
// 1. 使用命名文件,跨組件共享
SharedPreferences sp = getSharedPreferences("my_prefs", MODE_PRIVATE);
// 2. 獲取編輯器,連續操作後一次提交
SharedPreferences.Editor editor = sp.edit();
editor.putString("key", "value");
editor.putInt("count", 1);
editor.apply(); // 異步寫入,性能優於 commit()
// 3. 讀取
String val = sp.getString("key", "default");
關鍵點
getPreferences() 僅限當前 Activity 私有,無法跨組件訪問。
MODE_WORLD_WRITEABLE/READABLE 已棄用(API 17+),不安全,統一用 MODE_PRIVATE + FileProvider 或進程間通信。
- 編輯器鏈式調用,最後
apply()(非阻塞)或 commit()(同步返回結果)。