停止Android活动时保留变量值

时间:2017-01-13 14:52:14

标签: java android android-intent

我有两个活动,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,但这没用,因为我不希望我的数据在故意销毁活动/应用程序时仍然存在。

3 个答案:

答案 0 :(得分:0)

我认为你的问题在于了解整个Task生态系统。当您按下后退按钮时,您将从任务中弹出您的活动,因为它被销毁并且onDestroyed()被调用。
总结一下,我认为你每次都是一个全新的活动。 onSaveInstanceState()未被调用,因为活动被用户杀死,而不是 操作系统
深入了解这位开发人员tutorial
我认为这两个必须有用:meme

答案 1 :(得分:-1)

答案 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()

查看活动生命周期:

enter image description here