在活动生命周期图中,有一个箭头从"onstop"到"app process killed"到"oncreate"。我一直在想,现在我要做一个关于片段的小讨论;如果整个应用程序进程被破坏,OnCreate如何能够从OnStop接收捆绑包?系统是否跟踪被杀的应用程序及其活动包?我认为这就是它将如何做的,因为在那个时候,被杀死的应用程序将被零内存分配给它。
此外,从管理活动生命周期>启动活动页面的最后一段,"系统在除一个:…之外的所有情况下都调用了onPause()和onStop()之后调用OnDestroy(),并且其中一个情况没有说明内存不足。这让我觉得箭头永远不应该从OnStop转到OnCreate,因为"具有更高优先级的应用程序需要内存"。这是打字错误还是我读错了?我想我读错了,因为"可杀人"?"一般来说,活动生命周期中的移动如下:"图表。
其中一个必须是错误的,要么是活动生命周期图中的箭头,要么是"系统在除一个:…之外的所有情况下都调用了onPause()和onStop()之后调用OnDestroy()"。希望我是在断章取义。
How is it possible for onCreate to receive the bundle from onStop if the whole app process is destroyed?
它不"从顶层接收包",因为onStop()与Bundle无关。交付给onCreate()和onRestoreInstanceState()的Bundle包含onSaveInstanceState()在早期Bundle中输入的数据。该Bundle的内容跨流程边界传递给一个核心操作系统流程,该流程管理未完成活动及其任务的状态。如果相关的话,这些内容将被传递回应用程序的新进程。
Does the system keep track of killed apps and their activity bundles?
操作系统跟踪未完成的任务。在一段时间内(自上次使用后约30分钟),它会跟踪实例状态Bundle,以跟踪任务上的活动。
The system calls onDestroy() after it has already called onPause() and onStop() in all situations except one
存在多个不调用onDestroy()的情况。由于内存不足而终止进程可能会或可能不会导致调用onDestroy(),这取决于系统RAM需求的紧迫性。
OnDestroy不被调用的主要方式是当你按下Home键将其放入后台,然后用户从应用程序管理器手动将其杀死。
@托马斯赫梅什:在这种情况下,仍然可以调用onDestroy()。这取决于"应用程序管理器"是什么。最近的任务列表/概述屏幕是Android和第三方任务管理器的一部分,仍应导致调用onDestroy()。但是,设置中的"强制停止"和一些预先安装的任务管理器(不幸的是)执行"强制停止",将在不调用onDestroy()的情况下终止进程。
你是对的,应该是这样的,但我有很多次没有打电话给DEF
"有一段时间(自上次使用后大约30分钟),它…"我记录了一个int值(intent.getintextra),它是我在oncreate方法中传递给当前活动的一个束。然后我运行七到八个应用程序,直到操作系统终止了我当前的活动。我等了大约一个半小时。之后,我把我的应用程序带到前台,我看到了仍然有价值的包。这是否意味着捆绑包会一直保存到用户关闭应用程序?
@阿拉什:"直到操作系统杀死了我当前的活动"——操作系统不会杀死活动。它终止进程。"这是否意味着捆绑包会一直保存到用户关闭应用程序为止?--我不会这么想的。
@公共软件,一个活动可以是一个或多个进程。终止流程意味着收回他们的资源,而没有资源他们就无法生存。我写了杀了,因为在我的应用程序名前面的ide logcat窗格中,写了,死了。为什么在很长一段时间之后,这个包仍然有我的int值?
@阿拉什:"一个活动可以是一个或多个过程"——不,它不能。一个应用程序可能有多个进程。一个活动活在一个过程中。"为什么在很长一段时间之后,这个包仍然有我的int值呢?"--我不知道,对不起。
@通用软件,谢谢。你有时间回答这个问题吗:stackoverflow.com/questions/52425061/…
OnCreate很可能在onStop()之后调用。您可以使用onSaveInstanceState()传递包,该函数在活动或片段暂停或停止时调用。假设你有一个活动,然后按Home。同时调用OnStop和OnSaveInstanceState。在OnSaveInstanceState中,保存包以保存应用程序的状态。应用程序在后台的时间太长,因此被终止。然后,当您打开应用程序备份时,在savedinstancestate参数中,从onsaveInstanceState传递给oncreate的bundle将被重新创建。更多详情请参见官方文档https://developer.android.com/training/basics/activity-lifecycle/recreating.html
感谢您向我介绍开发人员的网站开发>培训>重新创建活动。它确实有一个非常有用的句子(除了其他有用的句子)。…然后,尽管实际的活动实例已不存在,系统仍会记住它的存在,这样,如果用户导航回它,系统将使用一组保存的数据创建活动的新实例。"