2

为了在我的 android 应用程序中保持状态,以便用户返回到他们停止的活动,我在清单中设置了非常有用的标志 alwaysRetainTaskState:

<activity android:name=".Main"
              android:label="@string/app_name"
              android:alwaysRetainTaskState="true"> 
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

这可以完成工作,或者我是这么认为的;我发现系统仍然可以破坏我的应用程序的活动以保留内存,同时仍然保持状态。为了验证这一点,我编写了一个小测试应用程序,它在循环中创建了一大堆活动,以查看我的应用程序的活动是否会被破坏。果然,系统破坏了我的活动。

通过一些阅读,我发现我需要使用 onSaveInstanceState() 和 onRestoreInstanceState() 来帮助维护活动状态。

为了解决我的问题,假设我有一个带有许多全局变量的 Activity,其中一些是静态的,而另一些则不是。它们由布尔值、数组列表、字符串等组成。我的问题是,当活动被销毁时,我很困惑这些变量中的哪些是持久的。我应该在 onSaveInstanceState() 中将哪些打包到包中?当一个活动被销毁时,系统是否对这些变量做任何事情?

4

1 回答 1

5

假设我有一个带有许多全局变量的 Activity,其中一些是静态的,而另一些则不是。

Java 中没有“全局变量”之类的东西。此外,应尽可能避免使用非最终(即可变)静态数据成员。

我应该在 onSaveInstanceState() 中将哪些打包到包中?

这是不可能抽象地回答的。

当一个活动被销毁时,系统是否对这些变量做任何事情?

可能。只要进程存在,静态数据成员就会存在。当您的最后一个活动被销毁时,您的进程将在不远的将来终止,并且那些静态数据成员将被淘汰。在您的应用程序的下一次运行中,这些静态数据成员将被重新初始化。

于 2010-01-22T07:20:07.167 回答