我在物理设备(三星Galaxy J4 +)上测试了该应用程序。我打开它并输入数据(用于 SharedPreferences )。然后...
使用三星屏幕底部的“ <”按钮使应用程序界面消失后,点击应用程序图标时,SharedPreferences 不加载,但是它们<使用“ |||”使应用程序界面消失后,点击应用程序图标时,strong>执行加载或三星屏幕底部的“ O”按钮。后者使我得出结论,保存和加载方法都可以正常工作。
加载方法(importSavedData())完全嵌入在MainActivity类内部的onCreate()方法中。该应用程序中没有其他活动生命周期方法 [onStart(),on Resume(),onPause()等)。
保存方法(saveData())每次将数据输入到应用程序时都会发生(通过按按钮发生),因此我认为没有必要在onStop中包含该方法()或onDestroy()方法。我确实尝试过在editor.apply()和editor.commit()之间切换,但无济于事。
public class MainActivity extends AppCompatActivity {
int winnerA;
int winnerB;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
importSavedData();
}
public void importSavedData() {
SharedPreferences savedData = getSharedPreferences("savedData",
Context.MODE_PRIVATE);
winnerA = savedData.getInt("winnerA_SP", 0);
winnerB = savedData.getInt("winnerB_SP", 0);
}
public void saveData(){
SharedPreferences savedData = getSharedPreferences("savedData",
Context.MODE_PRIVATE);
SharedPreferences.Editor editor = savedData.edit();
editor.putInt("winnerA_SP", winnerA);
editor.putInt("winnerB_SP", winnerB);
editor.apply();
}
/* saveData() is executed when the user has changed
the value of winnerA or winnerB by pressing one of the buttons in the
activity. */
}
答案 0 :(得分:0)
像这样覆盖onRestart()
和onResume()
:
@Override
public void onRestart() {
super.onRestart();
importSavedData();
}
@Override
public void onResume() {
super.onResume();
importSavedData();
}
因此,每次应用返回时,将从SharedPreferences
中读取值。
答案 1 :(得分:0)
如果该应用只是进入后台,则它可能不会调用onDestroy
,这意味着它返回时不会调用onCreate
。将加载项放到onResume
中,以使每次活动重新显示时都可以重新加载。看看Activity lifecycle。
@Override
protected void onResume() {
super.onResume();
importSavedData();
}