不幸的是,文档在很多方面都不是很清楚.这是其中之一.
理论上,如果Android在停止时销毁你的活动,那么它将调用onDestroy()并且GC将回收内存.实际上,Android从不会破坏个人活动以释放内存.它实际上做的是它取代整个操作系统进程.在这种情况下,onDestroy()永远不会被调用进程中的任何活动. GC无需清理任何东西,因为VM(虚拟机)会立即与进程中的其他所有内容一起死亡,并且操作系统会回收进程使用的全部内存量.
当您的用户导航回您的应用程序时,Android会为您的应用程序创建一个全新的流程,然后它将创建您的活动的新实例.在这种情况下,它当然会为实例获得一个全新的内存块.您还将看到构造函数被调用,并且还将调用onCreate().但是,由于Android保存了活动视图的状态,因此活动将通过调用super.onCreate()来恢复该状态.
在某些情况下,Android会销毁某个活动的实例并自动创建一个新活动.例如,这在配置(即:方向)改变期间完成.在这种情况下,Android会在旧实例上调用onDestroy()并创建活动的新实例.新实例获取旧实例的已保存状态,因此可以恢复视图的状态.在这种情况下,由于正在创建一个新实例,它当然会在内存中具有不同的地址.
一旦组件被销毁,它就会死亡,GC正在回收它所使用的内存. Android永远不会复活死机.
希望这能为您澄清情况.
编辑添加更多详细信息
Android会在自己的内部数据结构中跟踪这些任务中的任务和活动.对于每个活动,它保留启动活动的Intent的副本,发送给该活动的最新Intent,并保留包含该活动的已保存状态的Bundle. Android在活动上调用onSaveInstanceState(),以便活动有机会保存在Android决定杀死活动时恢复活动所需的任何内容. onSaveInstanceState()的默认实现保存了所有活动视图的状态.如果Android被杀死并重新创建(无论出于何种原因),您的实现需要保存活动恢复自身所需的任何其他内容.您的活动的私有成员变量和静态变量不会在Bundle中自动保存和恢复,因此如果您需要这些变量和异常,您必须使用onSaveInstanceState()提供的Bundle自行保存它们.静态变量将在应用程序进程的生命周期内保持不变,但由于Android可以随时终止进程(以回收资源),而无需警告,您也不能依赖于始终具有预期值的静态变量(在Android的情况下)杀死并重建了你的过程).
如果您的活动(或流程)被Android杀死,并且用户稍后导航回您的活动,则Android会使用其内部数据结构中的信息来创建活动的新实例.然后它在新实例上调用onCreate(),将保存的实例状态Bundle作为参数传递.然后,可以将其用于将活动恢复到原始实例被杀死之前的状态. Android也会在调用onStart()之后调用onRestoreInstanceState(),这样如果你不想在onCreate()中执行它,你也可以在该方法中恢复状态.
注意:请记住,要在Bundle中保存/恢复的任何内容必须是基元(int,boolean等),或者必须实现Serializable或Parcelable.