1

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

文档说在这种情况下“进程被杀死”。这是否意味着整个 Activity 实例被 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 () );
    }
}

somePropertynull在活动被杀死后再次出现在前面,还是someProperty还是一样?

我在问这个,因为很难模拟“其他应用程序需要内存”的条件。

4

1 回答 1

2

如果您在onSaveInstanceState()方法中什么都不做,它将为 null。阅读这个关于活动生命周期的Android 开发人员指南,您可能会发现一些有用的信息。

如果您希望在somePropertyActivity 未正常销毁时保存(即用户按下 BACK 按钮或应用程序调用 finish() ),您可以覆盖该onSavedInstanceState()方法并保存您想要的任何内容。上面链接的教程中有一个更明确的示例。

此外,还有另一篇文章和另一篇文章非常清楚地解释了活动的生命周期。

希望有帮助。

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

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

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

于 2013-09-22T01:49:33.340 回答