Arv*_*vis 27 singleton android
我有一些不清楚的情况:
在最后一次参考持有活动被破坏后,静态单例是否会被垃圾收集?因为Application中没有对单例实例的引用.那么我可以依靠单身人士吗?
通过官方Android文档:
通常不需要子类Application.在大多数情况下,静态单例可以以更模块化的方式提供相同的功能.
通过一些帖子:
在开发应用程序时,我发现有时一些绑定到活动的静态变量恰好是未初始化的,即使它们之前已被初始化!我认为当一个静态变量被初始化时,它在应用程序的整个生命周期中都是如此,但事实并非如此.
换句话说,如果没有任何东西对我的静态单例类进行引用,那么是什么阻止它被垃圾收集和销毁?
Raf*_*ele 15
不,因为如果它是一个单例,它被存储static
为其类中的一个字段,并且通常单例不会被客户端破坏,即你不会放置一个静态方法deleteInstance()
来设置引用,null
这样如果没有其他人使用它,它就符合条件用于垃圾收集.对于静态字段,当加载类的类加载器被丢弃时,将发生垃圾收集.
因此,关键字static
本身可能会导致内存泄漏,如果它引用了Activity对象,那么在使用它时应该非常小心.
是.每次离开应用程序时(例如,您的应用程序打开相机应用程序拍照,或打开浏览器打开链接,或者用户只需按下后退按钮),您的Application
对象可能会被销毁并重新创建当您导航回您的应用程序时.
您应该static {}
在自定义Application
类的块中初始化任何静态变量(如果有),或者在您的自定义类中Activities
确保它们不为空.
请注意,更有可能在硬件较弱,内存较低的设备上遇到此问题,但您应该期望它可以在任何设备上发生.
底线是,在android中,不要指望你的静态变量会随时留在内存中.始终检查它们是否存在,并在必要时在适当的位置重新初始化它们.
编辑:
我知道它已经很长时间了,我完全忘了这个帖子,无论如何,这里是官方Android生命周期文档的来源:
http://developer.android.com/training/basics/activity-lifecycle/recreating.html