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

Android 用于创建活动的意图是否仍然存在?,android,android-intent,android-activity,oncreate,Android,Android Intent,Android Activity,Oncreate,关于这个问题再多说一点 我想知道如果我不杀死它,我在创建活动的意图中传递的数据是否会保留 例如: 活动A使用额外的数据字符串(SomeStringValue)调用活动B。 然后活动B调用C,C调用D。在这段时间的某个地方,活动B被销毁(例如为了节省内存),当我回到活动B时,它需要重新创建(例如再次调用onCreate)但是,由于我使用了后退按钮而不是传递意图,我以前的意图是否仍然存在,我可以获得我需要的数据,或者数据是否会消失 我自己也尝试过测试它,但如果不关闭整个应用程序,我就无法再次调用on

关于这个问题再多说一点

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

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

我自己也尝试过测试它,但如果不关闭整个应用程序,我就无法再次调用onCreate。

如果调用了
onDestroy()
方法,则所有意图数据都可能丢失。。。您需要覆盖
onSaveInstanceState()
方法,以便传递您想要的数据。。。然后在
onCreate()
中检查saveInstanceState捆绑包是否为空


这将确保无论发生什么情况,所有额外的内容都将被保存…

如上所述,我通过进入“开发人员选项”并打开“不保留活动”来测试这一点

使用这种方法,我发现当从内存中删除某个活动时,可以保持最初的意图

当我离开某个活动时,立即调用onDestroy。当我返回到原始活动时,调用onCreate时,其意图中的值与最初发送的值相同

下面的代码被用作我的测试平台

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中保存意图数据是多余的。您应该只保存已更改或需要保留但不会永久保留的任何内容。

要测试此功能,请转到“开发人员选项”,并选中“不保留活动”选项。记住关闭它,因为很多应用程序都会崩溃。如果以后没有人回答这个问题,我会为你核实。如果你在活动中没有做什么特别的事情,一个简单的方法是改变设备的方向(例如从纵向到横向)。@Mikedge“不保持”活动是否表现得像是你在杀死他们?(因为某些按钮,如“返回”和“主页”(这是一个使用onActivityResult返回到第一个活动的按钮),我不担心是否调用了onDestroy(这通常意味着我希望活动结束)。我担心的是某个活动会被终止以释放一些内存,我也已经使用了onSaveInstanceState()只是想知道在使用intent时使用onSaveInstanceState是否是多余的。您还可以尝试使用
onLowMemory()
方法,但我不确定它是否能正常工作…我认为onLowMemory仅用于模拟器,而不是设备上。
当整个系统内存不足时,会调用此方法,并希望主动运行进程来勒紧裤腰带。
这是此方法上的javadoc感谢提供的信息。我也尝试过它使用了kill活动,当我保存了stancestate时,它一直崩溃,但如果我不使用它,就不会崩溃。