返回应用程序时静态变量为null

jch*_*tof 57 null static android android-activity

在我的应用程序中有一个静态变量,当我从外部浏览器返回我的应用程序时,该变量被设置为null.如果我正在启动的外部网页足够复杂,似乎应用程序或其中某些部分被杀死.

如果应用程序被完全杀死然后从主要活动中重新启动就可以了,但重新启动来自启动浏览器的活动 - 并且它并不意味着设置应用程序状态以便在访问空静态变量时崩溃.这对我来说是一个六分之一的设备问题所以我需要一些建议.

是否有设置标志以防止此行为?

kab*_*uko 45

这是大多数移动操作系统中的标准行为,绝对包括Android.您的应用程序在事实上,如果具有较高优先级(通常,如果是在前台它的优先级更高)其他应用程序所需要的资源往往被杀害.这是由于具有相对有限资源的移动设备的性质.

您应该将数据保存在更耐用的地方.您可能会发现有关通用数据存储的这篇文章很有用.此问题也应该相关:使用"保存实例状态"保存Android活动状态

请注意,这实际上不是六分之一的设备问题.这是所有设备上的"问题" ,它在您的某个设备上更明显,可能是因为它的内存较少.如果您在任何其他设备上运行内存密集型应用程序,您应该会看到相同的行为.也没有防止这种情况的旗帜.这是标准的和预期的.

  • @kabuko实际上我已经注意到我的Nexus S,自升级到ICS以来,它似乎以不同的方式处理活动生命周期.如果您在活动B中离开应用程序(通过按Home键),然后在几天之后返回它,它将不会在活动A中启动; 相反它会在B中重新启动.这在姜饼中从未发生过(它会像你说的那样在A中发布).我甚至检查了我的Nexus One(运行Gingerbread)和活动A中的应用程序重新启动,正如我们原先认为的那样,在Android系统杀死进程之后.这让我觉得ICS中的某些东西发生了变化? (11认同)

Vla*_*lov 20

通常,当设备进入睡眠模式时会发生这种情况.

可以通过以下步骤模拟设备的此行为:

  1. 运行应用程序,然后按主页按钮
  2. 在左下角的Android Studio中,选择已调试应用程序并按应用程序名称左侧的X按钮(终止应用程序).(不知道如何使用Eclipse,但我认为类似)
  3. 点击应用程序图标在设备上.

如果任务是活动,则应用程序将在最后一个活动上打开,并且(很可能)将生成错误,因为所有静态变量都已离开.


Man*_*ser 5

不...您不应该将数据存储在android的静态变量中。如果您坚持要这样做,那么当它为null时,您将需要能够从中恢复。.您应该使用捆绑包或其他方式保存您的状态。


Som*_*ere 5

在Android中使用静态(单例)的解决方案非常简单:

实现一个扩展的类,android.app.Application并在其中执行所有单例初始化onCreate()

推理:

  • 扩展Application的类首先被执行,即使你的应用程序的进程因内存不足而被杀死
  • 调用Application.onCreate()后,您的应用程序就会有上下文