对浏览器的意图导致应用重新创建活动

时间:2012-06-18 09:40:32

标签: android android-activity android-intent

我注意到,当我向外部活动(浏览器,图库,相机)发送意图时,有时(我不确切知道何时和为什么)系统会重新创建我的活动。说,我的活动有这个按钮:

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可以关闭活动,当它缺乏内存时,它们不在堆栈顶部。但是我遇到了与此行为相关的问题:当重新创建活动时,我的某些类字段变为空,因此会导致应用程序崩溃。

避免此类崩溃的最佳做法是什么?

2 个答案:

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