5

关于这个问题的更多信息。

我想知道如果我不杀死它,我在创建 Activity 的意图中传递的数据是否会保留。

示例:活动 A 使用额外数据 String(SomeStringValue) 调用活动 B。然后 Activity B 调用 C 调用 D。现在在这段时间的某个地方 Activity B 被销毁(例如为了节省内存),当我回到 Activity B 时需要重新创建它(例如再次调用 onCreate)但是因为我已经使用后退按钮而不是传递一个意图,我以前的意图仍然存在,我可以获得我需要的数据,或者这些数据会消失。

我试图自己测试它但我不能在不杀死整个应用程序的情况下再次调用 onCreate。

4

2 回答 2

12

如上所述,我通过进入开发人员选项并打开“不保留活动”进行了测试。

使用这种方法,我看到当从内存中删除活动时,原始 Intent 得以保留。

当我离开活动时,会立即调用 onDestroy。当我回到原来的活动时,onCreate 被调用,其 Intent 中的值与最初发送过来的值相同。

以下代码用作我的测试平台。

public class MyActivity extends Activity {
/**
 * Called when the activity is first created.
 */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    String extra = getIntent().getStringExtra("test");

    ((TextView) findViewById(R.id.test)).setText(extra);
}

public void onClick(View view) {
    Intent i = new Intent(this, MyActivity.class);
    i.putExtra("test", ""+Math.random());
    startActivity(i);
}

@Override
protected void onDestroy() {
    Log.d("Test", "onDestroy");
    super.onDestroy();    //To change body of overridden methods use File | Settings | File Templates.
}

}

因此,要回答您的问题,在 onSavedInstanceState 中保存 Intent 数据是多余的。您应该只保存已更改或需要保留但不会永久保存的任何内容。

于 2013-01-02T16:00:45.830 回答
0

如果onDestroy()调用了该方法,则可能会丢失所有意图数据...您需要覆盖该onSaveInstanceState()方法并传递您的意图数据...之后onCreate()只需检查 saveInstaceState 包是否为空...

这应该让你确定所有额外的东西都会被保存,无论发生什么......

于 2013-01-02T15:44:41.943 回答