1

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

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可以在内存不足时关闭不在堆栈顶部的活动。但是我有一个与这种行为有关的问题:重新创建活动时,我的一些类字段变为空,因此会导致应用程序崩溃。

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

4

2 回答 2

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 将在 onpause 时保存您的值。当应用程序以这种方式恢复时,onrestoreinstancestate 将恢复您的值,您可以保存或恢复您的值。

您也可以在清单中尝试另一种选择...

android:configChanges="方向"

但谷歌不建议这样做,因为它破坏了 android 活动的自然流程。

于 2012-06-18T09:52:35.527 回答
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();
        }
    });
于 2012-06-18T09:46:46.963 回答