我有两个活动,A和B.可以通过按活动A中的按钮打开活动B.
在活动B中,我有一个整数变量,当我从A返回到活动B时,我想保留这个变量。我的问题是,当我按下后退按钮从B转到A时,活动被破坏。
我已将onBackPressed方法覆盖为:
@Override
public void onBackPressed(){
Intent i = new Intent(this, Game.class);
startActivity(i);
}
我可以从我的日志中看到,按下后退按钮后活动B处于onStop()状态,但是,没有调用onRestart(),因此必须因为内存原因而杀死活动。
我已经读过其他帖子的答案,建议我使用onSaveInstanceState()但是当我尝试访问onCreate()中的bundle时,bundle是null。方法onRestoreInstanceState()不会被调用。
protected void onSaveInstanceState(Bundle savedInstanceState){
Log.i(LOG, "instance saving");
super.onSaveInstanceState(savedInstanceState);
savedInstanceState.putInt("score", userScore);
}
我也尝试过SharedPreferences,但这没用,因为我不希望我的数据在故意销毁活动/应用程序时仍然存在。
答案 0 :(得分:0)
我认为你的问题在于了解整个Task生态系统。当您按下后退按钮时,您将从任务中弹出您的活动,因为它被销毁并且onDestroyed()
被调用。
总结一下,我认为你每次都是一个全新的活动。 onSaveInstanceState()
未被调用,因为活动被用户杀死,而不是 操作系统 。
深入了解这位开发人员tutorial。
我认为这两个必须有用:me和me!
答案 1 :(得分:-1)
您可以在app class https://developer.android.com/reference/android/app/Application.html中存储变量,也可以为此创建自己的单例类 https://www.tutorialspoint.com/design_pattern/singleton_pattern.htm
答案 2 :(得分:-1)
在"<attribute name='contactid' />"
上开始Activity - A
肯定会杀死当前onBackPressed
。不要再次启动Activity,只需在Activity - B
中调用onBackPressed
,然后添加一个名为Activity - B
的阶段,当您从A恢复到活动B时调用该阶段
删除它:
onResume()
有了这个:
@Override
public void onBackPressed(){
Intent i = new Intent(this, Game.class);
startActivity(i);
}
当您从A回到B时,在B @Override
public void onBackPressed(){
super.onBackPressed();
}
阶段@Override
中,您可以在从活动A返回时保存该值。
在活动B中添加:
onResume()
查看活动生命周期: