Android 当我从另一个活动返回时再次调用OnCreate方法

Android 当我从另一个活动返回时再次调用OnCreate方法,android,android-activity,Android,Android Activity,假设应用程序有两个活动,A和B。从A开始,你按下一个按钮启动B。 在B中,按下另一个运行setResult(RESULT\u CANCEL,new Intent())的按钮;完成() 这样,视图会弹出回A 我正在两台设备上测试,一台运行姜饼(GB),另一台运行Jellybean(JB) 在GB上,当我将表单B返回到A时,没有调用方法—onCreate,我认为这意味着该活动还没有被释放(onDestroy也没有被调用) 但是在JB上,再次调用了创建的方法,我不明白为什么 最大的问题是,

假设应用程序有两个活动,A和B。从A开始,你按下一个按钮启动B。 在B中,按下另一个运行
setResult(RESULT\u CANCEL,new Intent())的按钮;完成()
这样,视图会弹出回A

我正在两台设备上测试,一台运行姜饼(GB),另一台运行Jellybean(JB)

在GB上,当我将表单B返回到A时,没有调用方法—
onCreate
,我认为这意味着该活动还没有被释放(
onDestroy
也没有被调用)

但是在JB上,再次调用了创建
的方法,我不明白为什么

最大的问题是,在我的应用程序中,
onCreate
用于从互联网加载数据。这样,JB将始终重新加载该数据,即使数据已经下载


这里到底发生了什么,为什么它们的行为会不同?

当框架需要创建活动的新实例时,它将调用
onCreate()
,这可能就是这里发生的情况

完全可以接受的做法是,框架在您离开活动后销毁活动(
onStop()
),然后在您回来时重新创建它。目前还不能保证何时会发生这种情况

通常,只有在内存压力存在时才会发生这种情况,但不同的设备会有所不同(当然,这取决于操作负载)。您可以通过在
设置->开发人员选项
中启用“不保留活动”来强制立即发生此行为


最后,还可以使用此命令直接查看活动层次结构:
adb shell dumpsys activity activities
。破译所有内容需要一些经验,但应该可以让您大致了解活动经理在任何时间点的世界观。

当框架需要创建活动的新实例时,它将调用
onCreate()
,这很可能就是这里发生的情况

完全可以接受的做法是,框架在您离开活动后销毁活动(
onStop()
),然后在您回来时重新创建它。目前还不能保证何时会发生这种情况

通常,只有在内存压力存在时才会发生这种情况,但不同的设备会有所不同(当然,这取决于操作负载)。您可以通过在
设置->开发人员选项
中启用“不保留活动”来强制立即发生此行为



最后,还可以使用此命令直接查看活动层次结构:
adb shell dumpsys activity activities
。破译每件事都需要一些经验,但应该可以让您大致了解活动经理在任何时间点对世界的看法。

您是否使用
startActivityForResult()
从a转到B?您使用什么
Intent
返回到不同的垃圾收集?您的活动可能会在JB中被清除,因为它在后台加载的内容更加严格。您是否尝试过保存它的状态,然后通过onCreate中的包恢复它?@codeMagic是的,我是。回到前面,我使用了一个新的“empty”
Intent
。当您使用“empty”
Intent
时,这不会导致活动调用onCreate?@Adam,显然,它不在姜饼上。您是在使用
startActivityForResult()
从a转到B吗?您使用什么
Intent
返回到不同的垃圾收集?您的活动可能会在JB中被清除,因为它在后台加载的内容更加严格。您是否尝试过保存它的状态,然后通过onCreate中的包恢复它?@codeMagic是的,我是。回过头来看,我使用了一个新的“empty”
Intent
。当你使用“empty”
Intent
,这不会导致活动调用onCreate?@Adam,显然,它不在姜饼上。唯一的缺点是,你的普通用户不想玩他们的设置来让他们的应用程序正常工作,尤其是对开发人员选项的干扰。@zgc7009他说作为一名开发人员,您可以启用此设置来测试您的应用程序在这些条件下是否正常工作。@KCopock yea必须阅读更多关于实际选项的内容。我以为它在做一些不同的事情。很适合调试。@zgc7009 True-在最近的Android版本中,它隐藏在一个特殊的“解锁”序列后面的主要原因。@Guillerme是的,如果你跳过了活动,或者调用finish()--系统将推断您已处理完该特定实例并将其销毁。唯一的缺点是,您的普通用户不想使用他们的设置使其应用程序正常工作,尤其是弄乱了开发人员选项。@zgc7009他是说,作为一名开发人员,您可以启用此设置来测试您的应用程序在这些条件下是否正常工作。@KCopock yea必须阅读更多实际选项。我以为它在做一些不同的事情。很适合调试。@zgc7009 True-这是在最近的Android版本中隐藏在特殊“解锁”序列后面的主要原因。@Guillerme是的,如果您跳过该活动或调用finish(),系统将推断您已完成该特定实例并将其销毁。