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

jli*_*lim 2 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>
Run Code Online (Sandbox Code Playgroud)

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

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

为了解决我的问题,假设我有一个包含许多全局变量的Activity,其中一些是静态的,有些则不是.它们由布尔,arraylists,字符串等组成.我的问题是,当一个活动被销毁时,我很困惑这些变量中的哪一个是持久的.我应该在onSaveInstanceState()中打包哪些包?当活动被销毁时,系统是否对这些变量做了什么?

Com*_*are 5

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

Java中没有"全局变量"这样的东西.还应尽可能避免非最终(即可变)静态数据成员.

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

这是不可能抽象回答的.

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

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