Android应用程序生命周期说明

Android应用程序生命周期说明,android,android-activity,Android,Android Activity,有人能确认以下关于android应用程序生命周期的信息吗 1) 当应用程序位于前台时,内存将包含应用程序对象的实例、所有活动的实例(未终止)以及从根目录引用的所有对象引用(尚未被垃圾收集) 2) 当应用程序进入后台时,Android框架在某个时候可以: a) 终止应用程序的整个过程,这将从内存中删除所有对象 b) 仅杀死活动(基本上不会删除其他对象引用)(通过完成它们,本质上也包括任何片段),保存它们的状态并创建活动堆栈,并留下任何其他内容(应用程序对象、任何其他静态对象、可从任何根访问的引用)

有人能确认以下关于android应用程序生命周期的信息吗

1) 当应用程序位于前台时,内存将包含应用程序对象的实例、所有活动的实例(未终止)以及从根目录引用的所有对象引用(尚未被垃圾收集)

2) 当应用程序进入后台时,Android框架在某个时候可以: a) 终止应用程序的整个过程,这将从内存中删除所有对象 b) 仅杀死活动(基本上不会删除其他对象引用)(通过完成它们,本质上也包括任何片段),保存它们的状态并创建活动堆栈,并留下任何其他内容(应用程序对象、任何其他静态对象、可从任何根访问的引用)


我最感兴趣的是2b,但我希望确认所有这些要点,因为我正试图从头到尾掌握整个概念。

如果你想获得官方确认,最好只问谷歌:)

但我觉得读了这篇文章后,你会对这些概念有更好的理解

第一个问题的答复: 是,使用DDMS确认

回答2a问题:是的,当其他进程需要内存时,操作系统可以在任何时间点终止进程,这将导致终止与进程相关的所有对象

2b问题g的答复:

来自官方文件


流程生命周期3。后台活动(用户不可见且已暂停的活动)不再是关键活动,因此系统可能会安全地终止其进程以回收其他前台或可见进程的内存。如果需要终止其进程,当用户导航回该活动(使其再次在屏幕上可见)时,将使用先前在onSaveInstanceState(Bundle)中提供的savedInstanceState调用其onCreate(Bundle)方法这样它就可以在用户上次离开它时的相同状态下重新启动自己。

是的,关于2b),您基本上是正确的

如果某个活动被暂停或停止,系统可以删除该活动 通过要求它完成,或者简单地杀死它的 过程

但是,在某些情况下,OnSaveInstantState未被调用:

请注意,在onPause()中保存持久数据很重要 属于onSaveInstanceState(捆绑),因为后者不是 生命周期回调,因此不会在每种情况下都像 在其文档中描述

通过启用以下开发人员选项,您可以请求android始终销毁后台活动。如果你正在调试你的应用程序,你应该能够逐步通过生命周期的方法,看看发生了什么


设置->开发人员选项->应用程序->不保留活动

应用程序不存在典型的生命周期。应用程序对象一直存在于内存中,直到它不会被Android本身或用户手动杀死

对于以上几点,以下是您的答案:

1) 这是真的

2) a)这也是事实。 2) b)当应用程序进入后台时,您只能保存前台当前活动的数据。此外,当您自行终止应用程序时(通过将其从最近列表中删除),应用程序堆栈中的所有活动及其保存的数据(非持久数据)都将终止,因为应用程序是所有活动的基础

1)当应用程序位于前台时,内存将包含实例 应用程序对象的所有活动的实例(未终止) 以及从其中一个对象引用的所有对象引用 根目录(尚未被垃圾收集)

2)当应用程序进入后台时,在某个点上,Android 框架可以:

a)终止应用程序的整个过程 这将从记忆中清除所有的物体

b)Kill ONLY(因此基本上不会删除其他对象引用) 活动(通过完成它们,本质上是任何片段) 保存它们的状态并创建活动堆栈和 保留任何其他对象(应用程序对象、任何其他静态对象、, 可从任何根访问的引用)

部分如第2.a.点的解释


这取决于Android操作系统的运行方式。安卓设备是一个嵌入式系统,但其工作原理与PC几乎相同。当我说安卓是一个操作系统时,它肯定具有操作系统的所有功能。您所指的是Android操作系统的内存管理和调度功能。 MMU(内存管理单元)在逻辑上优先考虑当前正在执行的任务,即ur启动器或您正在处理的任何其他应用程序。我想回答两件事,这对你会有更多帮助:

  • 视图(无论是xml生成的还是Java代码生成的,它们都是动态生成的)
  • Android操作系统在Dalvik虚拟机上以进程的形式运行所有应用程序,其中包含子进程(活动)
  • 创建活动之前的所有活动都为空,创建活动时将生成其实例。再次打开它们时,它们保存的实例将再次显示为viewd(Singleton设计模式的概念)
  • 所以让我告诉你,我不认为这两种选择都是正确的。我相信的是: 1.视图将始终动态生成。 2.实例将保存在内存中。
    3.在应用程序的后台运行时,可用实例的整个过程都将存储在内存中。

    好的,在最近几周的搜索过程中,我获得了更多信息,现在我可以回答自己(希望其他人也能回答)的问题:

    1) 正确的

    2a)正确

    2b)错误。这个
    > There will only ever be a few such processes in the system, and these
    > will only be killed as a last resort if memory is so low that not even
    > these processes can continue to run. Generally, at this point, the
    > device has reached a memory paging state, so this action is required
    > in order to keep the user interface responsive.
    
    > These processes have no direct impact on the user experience. Provided
    > they implement their Activity life-cycle correctly (see Activity for
    > more details), the system can kill such processes at any time to
    > reclaim memory for one of the three previous processes types. Usually
    > there are many of these processes running, so they are kept in an LRU
    > list to ensure the process that was most recently seen by the user is
    > the last to be killed when running low on memory.
    
    > Usually there are many of these processes running, so they are kept in an LRU
    > list to ensure the process that was most recently seen by the user is
    > the last to be killed when running low on memory.