让我们说,活动A用一个打算启动活动B并在额外的数据中传递数据。然后,由于内存问题,系统会终止我的进程。然后让我们说我的应用程序通过某种方式被带到前台,也假设活动A是清单中的启动活动,然后它会调出活动B(可能首先提出A),因为它是最后一个活动。
如果它调出了Activity B,那么在onCreate()中我是否可以访问我原来的意图,或者我有没有办法知道系统重新启动了我的活动?
答案 0 :(得分:0)
如果活动被杀 - 你将获得活动A - 我想在你的清单文件中你只有一个活动有意图过滤器<category android:name="android.intent.category.LAUNCHER" />
答案 1 :(得分:0)
“然后系统因内存问题和重新启动而终止我的进程。然后它恢复最后一个活动,即B.”
这是错误的,你应该从你的问题中删除它。
如果系统需要内存并杀死您的活动进程,则不会再次恢复。它可以重新启动,但随后它将从具有在清单中定义的启动意图的活动开始(或通过broadcastlistener,alarmmanager或notification)。
我理解你的问题:
如果某个活动已从活动堆栈中删除(因为系统需要内存),并且您重新启动它,那么您是否可以访问原始呼叫意图。
这样解释,很容易看出答案是否定的。由于重新启动被杀活动的唯一方法是使用新的Intent,因此旧的意图自然不可用。
BUT
如果要访问被杀死的活动实例中的数据,则需要将其保存在OnSaveInstanceState中。然后,下次启动活动时,将在OnCreate方法中提供已保存的状态。
请参阅Process Lifecycle:3。后台活动
使用它,您可以保存原始调用意图,并使用它来重新创建活动。在此之前,我会非常仔细地考虑这对用户体验的影响。