Android:试图保存数据,但在第二次 onDestroy() 时丢失了
Android: trying to save data but it's being lost on the second onDestroy()
基本上,我正在尝试使用我的 Android 应用程序保存和加载数据。当按下主页按钮并重新进入应用程序时,它会按预期工作。即使是第一次通过应用程序管理器关闭应用程序,它也会加载正确的数据(目前只有一个整数用于测试目的)。第二次通过应用程序管理器关闭应用程序时,数据丢失了,即使它使用与第一次相同的方法被杀死。在下面找到处理任何保存、加载和相关方法的代码。
Android 生命周期方法:
public int setting1 = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_layout);
loadData();
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
AdView mAdView = (AdView) findViewById(R.id.adView);
AdRequest adRequest = new AdRequest.Builder().build();
mAdView.loadAd(adRequest);
}
@Override
public void onPause() {
super.onPause();
saveData();
}
@Override
public void onStop() {
super.onStop();
saveData();
}
@Override
public void onDestroy() {
super.onDestroy();
saveData();
}
@Override
public void onResume() {
super.onResume();
loadData();
updateUnlockables(setting1);
}
保存和加载方法:
public void saveData(){
String filename = "icesSave.asv";
FileOutputStream fos;
try {
fos = openFileOutput(filename, Context.MODE_PRIVATE);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeInt(setting1);
oos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public void loadData(){
String filename = "icesSave.asv";
FileInputStream fis;
try{
fis = openFileInput(filename);
} catch (FileNotFoundException ex){
return;
}
try {
ObjectInputStream ois = new ObjectInputStream(fis);
setting1 = ois.readInt();
ois.close();
} catch (Exception e) {
e.printStackTrace();
}
}
saveData()
应该在 super
之上
不要在所有 3 种方法中使用 saveData()
,因为它们的过程相同
@Override
public void onPause() {
saveData();
super.onPause();
}
@Override
public void onStop() {
saveData();
super.onStop();
}
@Override
public void onDestroy() {
saveData();
super.onDestroy();
}
基本上,我正在尝试使用我的 Android 应用程序保存和加载数据。当按下主页按钮并重新进入应用程序时,它会按预期工作。即使是第一次通过应用程序管理器关闭应用程序,它也会加载正确的数据(目前只有一个整数用于测试目的)。第二次通过应用程序管理器关闭应用程序时,数据丢失了,即使它使用与第一次相同的方法被杀死。在下面找到处理任何保存、加载和相关方法的代码。
Android 生命周期方法:
public int setting1 = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_layout);
loadData();
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
AdView mAdView = (AdView) findViewById(R.id.adView);
AdRequest adRequest = new AdRequest.Builder().build();
mAdView.loadAd(adRequest);
}
@Override
public void onPause() {
super.onPause();
saveData();
}
@Override
public void onStop() {
super.onStop();
saveData();
}
@Override
public void onDestroy() {
super.onDestroy();
saveData();
}
@Override
public void onResume() {
super.onResume();
loadData();
updateUnlockables(setting1);
}
保存和加载方法:
public void saveData(){
String filename = "icesSave.asv";
FileOutputStream fos;
try {
fos = openFileOutput(filename, Context.MODE_PRIVATE);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeInt(setting1);
oos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public void loadData(){
String filename = "icesSave.asv";
FileInputStream fis;
try{
fis = openFileInput(filename);
} catch (FileNotFoundException ex){
return;
}
try {
ObjectInputStream ois = new ObjectInputStream(fis);
setting1 = ois.readInt();
ois.close();
} catch (Exception e) {
e.printStackTrace();
}
}
saveData()
应该在 super
不要在所有 3 种方法中使用 saveData()
,因为它们的过程相同
@Override
public void onPause() {
saveData();
super.onPause();
}
@Override
public void onStop() {
saveData();
super.onStop();
}
@Override
public void onDestroy() {
saveData();
super.onDestroy();
}