作家
登录

Android面试被问到内存泄漏了杂整?

作者: 来源: 2017-12-19 09:15:40 阅读 我要评论

  •         //... 
  •     } 
  •  
  • 匿名内部类/风静态内部类和异步线程

    • 风静态内部类创建静态实例造成的内存泄漏

    我们都知道风静态内部类是默认持有外部类的引用的,如不雅在内部类中定义单例实例,会导致外部类无法释放。如下面代码:

    由法度榜样分派内存,GC来释放内存。内存释放的道理为该对象或者数组不再被引用,则JVM会在恰当的时刻收受接收内存。

    当TestActivity烧毁时,因为innerClass生命周期等同于应用生命周期,然则它又持有TestActivity的引用,是以导致内存泄漏。

    精确做法应将该内部类设为静态内部类或将该内部类采掏出来封装成一个单例,如不雅须要应用Context,请按照膳绫擎推荐的应用Application 的 Context。当然,Application 的 context 不是全能的,所以也不克不及随便乱花,对于有些处所则必须应用 Activity 的 Context,对于Application,Service,Activity三者的Context的应用处景如下:

    • 匿名内部类

    android开辟经常会持续实现Activity/Fragment/View,此时如不雅你应用了匿名类,并被异步线程持有了,那要当心了,如不雅没有任何办法如许必定会导致泄漏。如下代码:

    膳绫擎的runnable所引用的匿名内部类持有TestActivity的引用,当将其传入异步线程中,线程与Activity生命周期不一致就会导致内存泄漏。

    • Handler造成的内存泄漏

    Handler造成内存泄漏的根来源基本因是因为,Handler的生命周期与Activity或者View的生命周期不一致。Handler属于TLS(Thread Local Storage)生命周期同应用周期一样。看下面的代码:

    1. public class TestActivity extends AppCompatActivity {     
    2.  
    3.     private Handler mHandler = new Handler() {         
    4.  
    5.         @Override 
    6.  
    7.         public void dispatchMessage(Message msg) {             
    8.  
    9.             super.dispatchMessage(msg); 
    10.  
    11.         } 
    12.  
    13.     };     
    14.  
    15.     @Override 
    16.  
    17.     protected void onCreate(@Nullable Bundle savedInstanceState) {         
    18.  
    19.         super.onCreate(savedInstanceState); 
    20.  
    21.         mHandler.postDelayed(new Runnable() {             
    22.  
    23.             @Override 
    24.  
    25.             public void run() {             
    26.  
    27.             //do your things 
    28.  
    29.             } 
    30.  
    31.         }, 60 * 1000 * 10); 
    32.  
    33.         finish(); 
    34.  
    35.     } 
    36.  

        推荐阅读

        一周云势:合纵连横竞争加剧,天上地下欢喜冤家

      此次的成功融资让金山云的用户也跟着受益,因为金山云的主流产品将周全降价,个中CDN、云数据库Redis新价动人,降幅最大年夜可达到50%、60%;云办事器价格最大年夜降幅跨越30%;对象存储产品>>>详细阅读


      本文标题:Android面试被问到内存泄漏了杂整?

      地址:http://www.17bianji.com/lsqh/39898.html

    关键词: 探索发现

    乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

    网友点评
    自媒体专栏

    评论

    热度

    精彩导读
    栏目ID=71的表不存在(操作类型=0)