我正在使用onStop()来保存活动恢复时所需的布尔值。
这是我的代码:
@Override
protected void onStop()
{
super.onStop();
Bundle bundle = new Bundle();
bundle.putBoolean("value",value);
getIntent().putExtras(bundle);
}
@Override
protected void onResume()
{
super.onResume();
if(getIntent().getExtras() != null)
{
Bundle bundle = getIntent().getExtras();
value = bundle.getBoolean("value");
}
}
我的问题是,无论布尔值是多少,我的onResume()总是将其检索为FALSE。如果我使用BACK按钮离开活动,则只会出现此问题。如果我按回家,事情似乎工作正常(即如果布尔值为TRUE,则onResume()将其检索为TRUE。
请帮助我,因为我不明白为什么onResume()总是得到布尔值为FALSE,即使我在onStop()中保存为TRUE。
我也试过onRestart(),onPause()和onBackPressed(),但我仍然无法获得正确的布尔值来保存。
答案 0 :(得分:1)
这里有两个问题。
onSaveInstanceState(Bundle)
并将Bundle中的值传递给onCreate(Bundle)
。检查以下示例:
public class SavedInstanceExample extends AppCompatActivity {
private boolean myBoolean;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_savded_instace_example);
if (savedInstanceState != null) {
myBoolean = savedInstanceState.getBoolean("key");
}
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putBoolean("key", myBoolean);
}
}
保存某些内容以使活动完成后的方法是将其保存到磁盘。一种常见/简单的方法是使用SharedPreferences
答案 1 :(得分:0)
当Android应用程序打开时,将调用以下活动生命周期方法。
onCreate();
onStart();
onResume();
当您按下后退按钮时,将通过调用以下方法来销毁应用程序
onPause();
onStop();
onDestroy();
在第二种情况下,当您按下主页按钮时,将调用以下方法
onPause();
onStop();
这意味着您的应用程序不会被完全销毁,您可以从最近的应用程序中打开它,以便通过调用重新显示该活动
onStart();
onStop();
这就是为什么你的代码适用于这种情况。
Activity提供onSavedInstanceState()
方法在配置更改期间保存您的数据或其他内容。
以下是Android文档的链接 Activity
答案 2 :(得分:0)
我建议您阅读Google Developers Link for Activity文档。
Google Developers Activity
答案 3 :(得分:0)
OP的代码基本上是正确的。如果您不破坏活动,但是例如将活动中的一个片段替换为另一个片段然后返回该片段,则onSavedInstanceState
不好,在这种情况下,您必须使用onStop
和{{ 1}},如下所示。这是Kotlin,并且有效,但原理相同。
onResume
我的Java有点生锈,但是我怀疑OP的问题可能是他混淆了override fun onStop() {
super.onStop()
val bundle = Bundle()
bundle.putBoolean("BOOL", false)
activity?.intent?.putExtras(bundle)
}
override fun onResume() {
super.onResume()
if (activity?.intent?.extras != null) {
val bundle = activity?.intent?.extras
val bool = bundle?.getBoolean("BOOL")
println("BOOL is $bool")
}
}
和boolean
?