我注意到,当我向外部活动(浏览器,图库,相机)发送意图时,有时(我不确切知道何时和为什么)系统会重新创建我的活动。说,我的活动有这个按钮:
button.setOnClickListener(new OnClickListener()
{
public void onClick(View v)
{
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://google.com");
startActivity(browserIntent);
}
});
我按下按钮,转到google.com,按回来 - 我的活动被重新创建(onCreate被调用 - 这就是我检测娱乐的方式)。 一般来说,这是好的,我听说android可以关闭活动,当它缺乏内存时,它们不在堆栈顶部。但是我遇到了与此行为相关的问题:当重新创建活动时,我的某些类字段变为空,因此会导致应用程序崩溃。
避免此类崩溃的最佳做法是什么?
答案 0 :(得分:1)
你已经告诉你某些类字段因为你可以使用
而变为空@Override
protected void onSaveInstanceState(Bundle outState) {
// SAVE YOUR DATA IN OUTSTATE BUNDLE
outState.putBoolean("save value", value);
super.onSaveInstanceState(outState);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
value = savedInstanceState.getBoolean("save value");
super.onRestoreInstanceState(savedInstanceState);
}
onsaveinstancestate会将您的值保存在暂停中。 onrestoreinstancestate将在应用程序恢复时恢复您的价值,这样您就可以保存或恢复您的价值。
您也可以在清单中尝试一种替代方案......
机器人:configChanges = “取向”
但谷歌没有推荐,因为它打破了Android活动的自然流程。
答案 1 :(得分:0)
使用如下的finish()方法,
button.setOnClickListener(new OnClickListener()
{
public void onClick(View v)
{
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://google.com");
startActivity(browserIntent);
finish();
}
});