Android 活动生命周期和类属性

Android 活动生命周期和类属性,android,android-activity,Android,Android Activity,在某些情况下(例如“其他应用程序需要内存”),可以终止任何活动。在此之后,在活动上再次调用onCreate 文件中说,在这种情况下,“进程被终止”。这是否意味着整个活动实例是gc’ed并再次构造的,还是仅GUI部分 鉴于: public class MyActivity extends Activity { private SomeClass someProperty = null; @Override protected void onCreate (Bundle s

在某些情况下(例如“其他应用程序需要内存”),可以终止任何活动。在此之后,在活动上再次调用
onCreate

文件中说,在这种情况下,“进程被终止”。这是否意味着整个活动实例是gc’ed并再次构造的,还是仅GUI部分

鉴于:

public class MyActivity extends Activity
{
    private SomeClass someProperty = null;

    @Override
    protected void onCreate (Bundle savedInstanceState)
    {
        super.onCreate (savedInstanceState);
        if (someProperty == null) someProperty = new SomeClass ();
        Log.d ("X", someProperty.toString () );
    }
}
在活动被终止并再次出现后,
someProperty
是否仍为
null
,或者
someProperty
是否仍保持不变?


我在问这个问题,因为很难模拟“其他应用程序需要内存”的条件。如果在
onSaveInstanceState()
方法中不执行任何操作,它将为空。阅读有关活动生命周期的文章,您可能会发现一些有用的信息

如果希望在活动未正常销毁时保存
someProperty
(即用户按下后退按钮或应用程序调用finish()),可以覆盖
onSavedInstanceState()
方法并保存所需内容。上面链接的教程中有一个更明确的示例

此外,还有另外一个非常清楚地解释了活动的生命周期

希望对你有帮助

编辑: 关于何时不会调用
onSavedInstanceState()
(即“正常销毁”,这可能是一个令人困惑的表达式),本文说,我引用:

如果用户与某个活动交互并按下后退按钮,或者调用了某个活动的finish()方法,则该活动将从当前活动堆栈中删除并回收。在这种情况下,没有要保存的实例状态,并且不会调用onSaveInstanceState()方法

如果用户与活动交互并按下Home按钮,则必须保存活动实例状态。调用onSaveInstanceState()方法。如果用户重新启动应用程序,它将恢复或重新启动上次运行的活动。如果重新启动该活动,它将向包提供保存数据到onRestoreInstanceState()和onCreate()方法


非常感谢。我怀疑我必须通过保存的实例状态。你说的“不正常破坏”是什么意思?您的意思是,由于系统决定释放内存,因此当活动被销毁时,不会调用
onSaveInstanceState
。对于这个令人困惑的表达式,我感到抱歉。事实上,情况恰恰相反。详细信息请参见我的编辑。谢谢你的支持。您知道由于另一个进程跳转到前端(例如电话),并且由于内存不足,第一个活动被回收,因此该活动被回收时会发生什么情况吗。在这个场景中,
onSaveInstanceState
是否被调用?很难模拟这个场景,所以我不能完全确定这一点。然而,根据《开发指南》和api参考,我想说,我们应该而且只能将此场景视为调用
onSaveInstanceState
。(另外,事实上,这不太可能发生,因为android使用LRU列表维护进程队列。因此,除非在非常极端的情况下,否则不太可能杀死最近使用的进程。请尝试[此](developer.android.com/guide/components/processs and threads.html#processes)以了解有关进程回收的更多信息)