d-m*_*man 96 static android static-members android-lifecycle
我正在创建事件搜索应用程序,我们在另一个屏幕中填充一个屏幕设置搜索条件,然后用户可以从第3个屏幕编辑搜索条件并转到第4个屏幕.
为了实现上述任务,我使用静态对象来记住应用程序周围的值,我不需要做任何额外的事情.
但我担心如果关于静态对象生命周期在android如果低内存发现android删除静态对象???
由于android支持多任务处理,如果用户切换到另一个应用程序并且当用户回来应用程序开始疯狂时,静态对象在多任务时被删除??? 任何的想法 ??并建议通过单例方法保持静态对象是更好的方法???
Sam*_*muh 233
让我们从一些背景知识开始:启动应用程序时会发生什么?
操作系统启动一个进程并为其分配一个唯一的进程ID并分配一个进程表.一个进程启动一个DVM实例(Dalvik VM); 每个应用程序都在DVM中运行.
DVM管理类加载卸载,实例生命周期,GC等.
静态变量的生命周期:一个静态变量在JVM加载一个类时就存在,并在卸载该类时死掉.
因此,如果您创建一个Android应用程序并初始化一个静态变量,它将保留在JVM中,直到出现以下情况之一:
1.卸载该类
2. JVM关闭
3.进程 终止
请注意,当您切换到另一个应用程序的其他活动时,静态变量的值将保持不变,并且上述三个都不会发生.如果上述三个中的任何一个发生静态将失去其价值.
您可以使用以下几行代码对此进行测试:
希望有所帮助.
r1k*_*1k0 16
嗯,Singleton模式也基于使用静态变量,所以实际上你将处于相同的位置.虽然静态方法在大多数情况下都可以工作,但是在某些情况下,当内存已满并且另一个活动在应用程序移动到下一个屏幕之前占据前景时,可能会发生这种情况,您的活动进程可能会被终止而您将丢失静态值.然而,Android提供了一些在状态之间保持值或传输它们的选项,例如:
通过查看谷歌代码或其他开源Android应用程序中的aegis-shield源代码树,您可以获得偏好,意图和sqlite数据库使用的一些代码示例.
经过一些研究后发现,使用Application来存储单例并不是一个好主意,除非你准备重新创建它:
因此,虽然接受的答案在技术上是正确的,但它并不提供所有信息.
如上面的链接所示,如果您真的想坚持使用该模型,则需要准备好检查null并重新创建数据(如果可能).
归档时间: |
|
查看次数: |
36858 次 |
最近记录: |