zoukankan      html  css  js  c++  java
  • 再次进入程序,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错,要不断地判断孩子有没有父亲,有父亲的话,从父亲里把孩子移除(因为总有个静态的父亲在引用你)。

  • 相关阅读:
    C#语法糖
    C#十种语法糖
    委托
    C#迭代器
    C#事件
    C#事件
    c# event 事件浅析
    ASP.NET CORE 增删改查
    asp.net core 增删改查
    asp.net core 搭建MVC
  • 原文地址:https://www.cnblogs.com/gangmiangongjue/p/4579997.html
Copyright © 2011-2022 走看看