Android如何静态对象生命周期?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (23)

我正在创建事件搜索应用程序,我们从一个屏幕中设置搜索条件并填充到另一个屏幕中,然后用户可以从第3个屏幕编辑搜索条件并转到第4个屏幕。

为了实现上述任务,我使用了记住应用程序周围值的静态对象,我不需要额外做任何事情。

但是,如果关于Android的静态对象生命周期,如果低内存找到android删除静态对象?

提问于
用户回答回答于

一个静态变量的生命周期:当一个类被JVM加载并在类被卸载时死掉时,一个静态变量就会出现。

因此,如果你创建一个android应用程序并初始化一个静态变量,它将一直保留在JVM中,直到发生以下情况之一: 1.该类被卸载 2.该JVM关闭 3.该进程死亡

请注意,当您切换到另一个应用程序的另一个活动时,静态变量的值将保持不变,并且上述三个都不会发生。如果上述三种情况发生,静态将失去其价值。

你可以用几行代码来测试它:

  1. 在你的活动的onCreate中打印未初始化的静态 - >应该打印null
  2. 初始化静态。打印它 - >值将是非空
  3. 点击后退按钮并进入主屏幕。注意:主屏幕是另一项活动。
  4. 再次启动你的活动 - >静态变量将是非空的
  5. 从DDMS中停止您的应用程序进程(设备窗口中的停止按钮)。
  6. 重新启动您的活动 - >静态将具有空值。

用户回答回答于

那么,Singleton模式也是基于使用静态变量,所以实际上你将处于相同的位置。虽然静态方法可能在大多数情况下都有效,但在某些情况下,当内存已满并且另一个活动在应用程序移至其下一个屏幕之前占用前台时,您的活动进程可能会被终止,并且会丢失静态值。不过,Android提供了一些在状态之间保持值或传输它们的选项,例如:

  • 使用Intent,你可以将你的搜索条件从活动传递到活动(类似于Web http请求)
  • 使用应用程序首选项,你可以保存这些值并将其检索到需要它们的活动中
  • 使用sqlite数据库,你可以将它们保存在表中并稍后检索它们
  • 如果您只需要保存活动状态,以便在重新启动时,这些字段可以填充以前选择的值,则可以实现onSaveInstanceState()活动方法 - 请注意,不建议在活动持久状态之间使用这种方法。

扫码关注云+社区