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

我们知道,在存储方式上,成员变量在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错,要不断地判断孩子有没有父亲,有父亲的话,从父亲里把孩子移除(因为总有个静态的父亲在引用你)。

转载于:https://www.cnblogs.com/gangmiangongjue/p/4579997.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值