是否在操作系统重启后调用 onActivityResult() 之前重新创建了活动的视图?

Posted

技术标签:

【中文标题】是否在操作系统重启后调用 onActivityResult() 之前重新创建了活动的视图?【英文标题】:Is the activity's view recreated before its onActivityResult() called after an OS restart? 【发布时间】:2018-11-12 18:30:06 【问题描述】:

假设我有 Activity A。我使用 startActivityForResult() 从 Activity A 启动 Activity B,一旦完成,就会在 Activity B 中调用 setResult() 函数,从而调用 Activity A 的 onActivityResult()。

但是,如果我在 Activity B 中时,android 操作系统会终止该应用程序并重新启动它。当应用程序恢复后,我回到了 Activity B,然后我选择通过调用 setResult() 返回到 Activity A。所以我的问题是,在调用它的 onActivityResult() 之前,Activity A 的视图是否被重新创建(onCreate() 调用)?在这种情况下,Activity A 的 onActivityResult() 是否会被调用?

感谢阅读。

【问题讨论】:

是的,首先调用onCreate(),然后调用onActivityResult() @pskink 谢谢! 【参考方案1】:

所以我的问题是,是否重新创建了活动 A 的视图(调用了 onCreate()) 在调用它的 onActivityResult() 之前?在这种情况下,是 Activity A 的 onActivityResult() 竟然被调用了?

是的。如果操作系统杀死了您的应用程序的进程并且 Activity B 已完成,则操作系统知道重新创建 Activity A 并将结果传递给 onActivityResult(),就像 Activity A 根本没有死亡一样。

注意:

这只有在您的两个活动都在不同的进程中时才有可能。操作系统在内存压力下从不直接杀死活动。它只是杀死了托管活动的整个进程。如果您的两个活动都托管在同一进程中,那么您的情况就不应该发生。 任何回调类实例、成员变量,甚至静态变量都会随着 Activity A 一起被销毁,因为整个进程都被杀死了。您必须在 Activity A 中重新创建它们。

【讨论】:

有用且详细的答案。谢谢!

以上是关于是否在操作系统重启后调用 onActivityResult() 之前重新创建了活动的视图?的主要内容,如果未能解决你的问题,请参考以下文章

应用程序重启后未调用iOS OneSignal handleNotificationReceived回调

系统关机重启注销详解

Inno Setup 安装完成后,默认不重启

centos 7中磁盘挂载重启后挂载失效

为啥修改过的系统配置文件在机器重启后又恢复到原始状态

VS2013每次打开一次后都必须重启