android中使用static 类造成的问题
来源:互联网 发布:班车软件 编辑:程序博客网 时间:2024/06/05 23:05
static 类使用场景-单例模式
java中经常会使用单例模式,单例模式保证内存中同一时间只有一个类的对象,如:
public class AutoTestModuleManager{ private static AutoTestModuleManager mAutoTestMdManager = null; private Map<String, AutoTestModule> mUiList = null; private AutoTestModuleManager() { Log.w("test","AutoTestModuleManager"); if(null == mUiList){ mUiList = new HashMap<String, AutoTestModule>(); } mUiList.clear(); } public synchronized static AutoTestModuleManager getInstance() { if (null == mAutoTestMdManager) { mAutoTestMdManager = new AutoTestModuleManager(); SkLog.e("getInstance"); } return mAutoTestMdManager; }}
单例模式就是使用static 类,上述代码的getInstance获取AutoTestModuleManager 的单一对象。还有下面一种俗称双重检查锁定的单例模式:
public class Singleton { private volatile static Singleton singleton; private Singleton (){} public static Singleton getSingleton() { if (singleton == null) { synchronized (Singleton.class) { if (singleton == null) { singleton = new Singleton(); } } } return singleton; } }
android中使用static类易出现的问题
在android中使用static类需要注意,如果apk退出时程序员未主动释放static类,将造成内存泄漏。如上述AutoTestModuleManager类,如果在activity中调用,当activity onPause-》onStop-》onDestory退出后,AutoTestModuleManager静态对象并没有被销毁,这时如果再次进入activity,会发现AutoTestModuleManager的构造函数并没有被执行,也就是说AutoTestModuleManager静态对象没有重新生成。
出现这种问题带来的不仅仅是内存泄漏的危害,对我们的程序运行逻辑也是有意料不到的影响。比如我们在activity中调用静态类,希望在activity调用的时候能初始化该类,但是如果activity退出的时候没有释放静态类,当再次启动activity时,静态类没有初始化,而是沿用的上一次的,这样就会带来问题。
解决办法
在使用静态类时要注意使用完后释放,如上述AutoTestModuleManager类中,增加release接口:
public synchronized void release(){ if(mUiList != null){ mUiList.clear(); } mUiList = null; mAutoTestMdManager = null; }
activity中使用完AutoTestModuleManager后调用release()即可。
0 0
- android中使用static 类造成的问题
- Android开发中使用Fragment造成的图像残留问题
- Android开发中使用Handler类造成的内存泄露问题
- Android开发中使用Static静态变量带来的问题
- android中使用static、application、本地存取数据的问题
- Android使用Handler造成的内存泄露问题的解决
- android studio中多model造成的问题
- 在LoaderCallbacks中使用CursorAdapter造成的内存泄露问题
- 关于程序中使用反射时混淆造成的问题
- Android中使用Handler造成内存泄露的分析总结
- java中static方法的使用问题
- 类中static的使用
- Android中静态变量(static)的使用
- Android中静态变量(static)的使用
- android中static的使用注意
- Android中使用Handler造成内存泄露
- Android中使用Handler造成内存泄露
- android 解决bitmap造成的OOM问题
- 美国高中的兼职——实验室助理
- spring4.0.9结合redis进行数据的缓存
- Android用java数组实现计算器的四则运算
- 论文--搜索批量下载_linux
- LiteOrm:Android数据库框架-存储服务器(LiteOrm)的使用
- android中使用static 类造成的问题
- 项目质量管理
- 封装、继承、多态
- EditText设置只能输入小数点后1位
- 关于Ubuntu锁屏后,无法输入密码
- PHP面向对象编程 面向对象的特殊实践
- hackinglab.cn脚本关之二
- SurfaceView和View的区别
- [Scrapy]模拟登陆并获取Cookie值