Android 应用程序启动生命周期

Android 应用程序启动生命周期,android,Android,我无法找到关于应用程序长期生命周期的良好文档 如果我让应用程序运行,点击home按钮,然后单击应用程序的启动器图标,应用程序的onCreate不会被调用,前台活动的onResume会被调用。但如果我在某个点上等待足够长的时间,单击launcher图标将调用Application onCreate,主launcher活动将启动。这是什么时候发生的 当我浏览“最近使用”列表中的应用程序时,如果我点击了一个我一个月没有使用过的非常旧的应用程序,该应用程序不会返回到以前的状态,而是会进入启动状态。因此,

我无法找到关于应用程序长期生命周期的良好文档

如果我让应用程序运行,点击home按钮,然后单击应用程序的启动器图标,应用程序的onCreate不会被调用,前台活动的onResume会被调用。但如果我在某个点上等待足够长的时间,单击launcher图标将调用Application onCreate,主launcher活动将启动。这是什么时候发生的

当我浏览“最近使用”列表中的应用程序时,如果我点击了一个我一个月没有使用过的非常旧的应用程序,该应用程序不会返回到以前的状态,而是会进入启动状态。因此,在某个时刻,应用程序似乎从保存状态变为不保存状态。这是什么时候发生的

如果应用程序由于内存压力而被终止,则可能会保存savedInstanceState捆绑包并调用Activity onResume,但应用程序的onCreate是否会在此时被调用?这个包可以保存多长时间

但如果我在某个点等待足够长的时间,单击启动器图标将调用Application onCreate,主启动器活动将启动。这是什么时候发生的

这些是不同的问题

应用程序
单例是在流程分叉后不久创建的,作为为您启动新流程的一部分。当某些东西需要你的应用程序存在时(例如,用户点击启动程序图标),而你的进程不存在时,将触发此操作。任何给定的进程在内存中保留多长时间取决于各种环境因素

启动程序活动是否恢复现有任务,或者任务是否重置,取决于任务是否存在(即,用户是否从“最近的任务”列表中删除了任务)以及用户离开任务后的时间。一个任务被视为“活动”大约30分钟,尽管有一些清单条目可以用来稍微调整它

因此,在某个时刻,应用程序似乎从保存状态变为不保存状态。这是什么时候发生的

大约30分钟(见上一段)

如果应用程序由于内存压力而被关闭

我猜“app get's killed”的意思是“app的进程被终止”

可能会保存savedInstanceState捆绑包并调用Activity onResume,但应用程序的onCreate是否会在此时被调用

是的,因为需要为您创建一个新流程

这个包可以保存多长时间


大约30分钟(见上文)。

设备上安装的每个应用程序都在其进程内运行

  • 如果您是第一次输入应用程序,将调用以下顺序:

    • 应用程序。onCreate()
    • YourFirstActivity.onCreate()(前提是YourFirstActivity在AndroidManifest.xml中声明)
    • 您的第一次访问。onStart()
    • 您的第一个活动。onResume()
  • 如果单击“主页”按钮,应用程序将转到后台,并调用以下回调方法:

    • 您当前的活动。onPause()
    • YourCurrentActivity.onSaveInstanceState()-此调用未精确指定,但您可以假设在大多数情况下,通过onStop()方法调用onSaveInstanceState()
    • 您当前的活动。onStop()
  • 当应用程序处于后台时,没有指定它将在后台停留多长时间

    由系统在后台对其进行维护

    许多应用程序,当你在后台时,执行定期同步,运行预定服务,或者在启动时只是在前台运行。为此,Android操作系统必须找到内存来执行所有这些逻辑。因此,如果所需内存不足,则操作系统会终止进程(例如,您的应用程序)

    因此,如果您将应用程序隐藏到后台,然后单击应用程序启动器图标或立即从最近的应用程序列表返回到应用程序,则会执行以下回调方法序列(假设您在当前活动中隐藏了应用程序):

    • 您当前的活动。重新启动()
    • 您当前的活动。onStart()
    • 您当前的活动。关于RestoreInstanceState()
    • 您当前的活动。onResume()
    但是,如果您在较长时间内没有重新输入隐藏的应用程序,那么操作系统很可能已经终止了您的应用程序,以满足其他应用程序的要求

    如果发生这种情况,将调用以下一系列回调方法:

    • 应用程序。onCreate()
    • 您当前的活动。onCreate()
    • 您当前的活动。onStart()
    • 您当前的活动。onResume()
    请注意,将应用程序隐藏到后台时留下的仍然是您当前的活动

    执行以下顺序是因为系统为您的应用程序创建了新进程@commonware points

    如何防止应用程序被系统杀死? ()


    希望这能有所帮助。

    这30分钟可能是从哪里来的-在内核或框架代码中试验或引用。@commonware当你在30分钟以上的最近任务列表中启动非活动应用程序时,Android应该重新创建最重要的任务活动,对吗?你是说不需要重新交付一个包就可以实现吗?如果用户通过堆栈返回,其他活动会以同样的方式重新创建吗(没有捆绑)?@MorrisonChang:我在为我的书研究任务章节时,在文档的某个地方读到了它。我一直认为规则是“如果在re中