android - Android static 对象生命周期

  显示原文与译文双语对照的内容

我正在创建事件搜索应用程序,我们从另一屏幕的屏幕上设置搜索条件,用户可以编辑 3rd 屏幕。

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

但是我担心如果 static 中的对象生命周期如果低内存发现android对象删除 static 对象?

当android支持多任务时,如果用户切换到它的他应用程序,当用户回来时,static 对象会被删除。 有什么想法而且建议通过单例方法保存 static 对象是更好的方法?

时间: 原作者:

让我们从一些背景开始: 启动应用程序时发生的情况?
操作系统启动一个进程并分配一个独特的进程a 并分配一个流程 table.A 过程;。
一个DVM管理卸载卸载,实例生命周期,GC等。

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

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

注意,当 switch 到另一个应用程序的不同 Activity 时,static 变量的值将保持不变,而上述三个。 如果上述三种情况发生,static 将失去它的价值。

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

  • 在你的Activity 中打印未初始化的static -> 应该打印 null
  • 初始化 static 。打印它-> 值将为非空
  • 点击后退按钮进入主屏幕。 注意:主屏幕是另一个 Activity 。
  • 再次启动 Activity ->的static 变量将非空
  • 从 DDMS ( 设备窗口中的停止按钮) 中终止你的应用程序进程。
  • 重新启动 Activity -> static 将有空值。

希望有帮助

原作者:

Singleton Pattern 也基于 static 变量,所以实际上你将处于相同的位置。 在大部分情况下,static 方法可能工作,在某些情况下,内存满了,而其他 Activity 在应用程序移动到下一屏幕之前,可能会被杀死,并丢失值。 然而,Android提供了一些在状态之间保持值或者传输这些值的选项,例如:

  • 使用 Intent,你可以将搜索条件从 Activity 传递到 Activity ( 类似于 web http请求) 。
  • 你可以使用应用程序偏好设置保存值并在需要它们的Activity 中检索它们
  • 你可以使用SQLite数据库将它们保存在一个表中并稍后检索它们
  • 在重启时,你可以使用先前选择的值来填充这些字段,这样可以实现 onSaveInstanceState() Activity 方法。

你可以通过查看 aegis屏蔽源代码,在或者其他开源Android应用程序中,获得一些使用偏好和SQLite数据库的代码示例。

...