用于创建活动的意图是否存在?

时间:2013-01-02 15:34:56

标签: android android-intent android-activity oncreate

关于这个问题的更多内容。

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

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

我已经尝试过自己测试但是我无法在不杀死整个应用程序的情况下再次调用创建。

2 个答案:

答案 0 :(得分:11)

如上所述,我通过进入开发者选项并打开“不要保持活动”来测试这个。

使用这种方法,我发现在从内存中删除活动时会保留原始的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数据是多余的。您应该保存任何已更改或需要保留但不会永久保留的内容。

答案 1 :(得分:0)

如果调用了onDestroy()方法,那么所有意图数据都会被丢失......你需要覆盖onSaveInstanceState()方法传递你的意图数据......之后在onCreate()中检查saveInstaceState包是否为空...

这应该可以确保所有额外内容都会被保存,无论发生什么......