码迷,mamicode.com
首页 > 编程语言 > 详细

再次进入程序,Java静态变量与成员变量的不同表现和对单例模式的思考

时间:2015-06-29 16:32:25      阅读:124      评论:0      收藏:0      [点我收藏+]

标签:

我们知道,在存储方式上,成员变量在JVM中是存储在堆里边的,而静态变量则位于JVM中的方法区,两者的主要区别在于,成员变量不再受引用常常会导致被回收,而方法区对垃圾回收的限制相当严苛,除非是整个应用被卸载,否则静态变量会一直存在。

在android应用中使用成员变量,在退出应用之后,所有的成员变量肯定会被回收,而静态变量则相反。尤其是在UI设计上,如果你自定义一个static的viewgroup,创建时候为其addchlid,你就一定要考虑到这个情况,因为再次进入程序,还是会调用addchild方法,这样肯定会报错,如果child是动态创建的,那么每次viewgroup都会有新的成员填进来,如果child是成员变量什么的,由于此变量一直有个静态引用存在,所以不会被消除,再次添加会报child can only have a parent错误。还有一种情况,如果child也是静态变量,那么静态变量一多,占用的内存开销...尤其是手机上。

综上,在UI设计定义单例模式,感觉不太靠谱,除非是没有子组件的,要不为了避免报child can only have a parent错,要不断地判断孩子有没有父亲,有父亲的话,从父亲里把孩子移除(因为总有个静态的父亲在引用你)。

再次进入程序,Java静态变量与成员变量的不同表现和对单例模式的思考

标签:

原文地址:http://www.cnblogs.com/gangmiangongjue/p/4579997.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!