系统杀死活动时具有全局变量的Android持久状态

时间:2010-01-22 01:22:15

标签: java android android-intent

为了在我的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,其中一些是静态的,有些则不是。它们由布尔,arraylists,字符串等组成。我的问题是,当一个活动被销毁时,我很困惑这些变量中的哪一个是持久的。我应该在onSaveInstanceState()中打包哪些包?当活动被销毁时,系统是否对这些变量做了什么?

1 个答案:

答案 0 :(得分:5)

  

让我说我有一个活动   全局变量的数量,一些   它们是静态的,有些则不是。

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

  

我应该打包哪些   捆绑在onSaveInstanceState()?

这不可能在摘要中回答。

  

系统是否对这些做了什么   活动时的变量   销毁?

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