最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android Handler內(nèi)存泄漏原因及解決方案

 更新時間:2021年02月18日 10:20:46   作者:OpenGL  
這篇文章主要介紹了Android Handler內(nèi)存泄漏原因及解決方案,幫助大家更好的理解和利用Android進行開發(fā),感興趣的朋友可以了解下

目錄:

1.須知:

  1. 主線程Looper生命周期和Activity的生命周期一致。
  2. 非靜態(tài)內(nèi)部類,或者匿名內(nèi)部類。默認持有外部類引用。

2.原因:

Handler造成內(nèi)存泄露的原因。非靜態(tài)內(nèi)部類,或者匿名內(nèi)部類。使得Handler默認持有外部類的引用。在Activity銷毀時,由于Handler可能有未執(zhí)行完/正在執(zhí)行的Message。導致Handler持有Activity的引用。進而導致GC無法回收Activity。

3.可能造成內(nèi)存泄漏

匿名內(nèi)部類:

  //匿名內(nèi)部類  
  Handler handler=new Handler(){
    @Override
    public void handleMessage(Message msg) {
      super.handleMessage(msg);
    }
  };

非靜態(tài)內(nèi)部類:

  //非靜態(tài)內(nèi)部類
  protected class AppHandler extends Handler {

    @Override
    public void handleMessage(Message msg) {
      switch (msg.what) {
        // TODO: 2019/4/30 
      }
    }
  }

4.解決方法:

Activity銷毀時,清空Handler中,未執(zhí)行或正在執(zhí)行的Callback以及Message。

  // 清空消息隊列,移除對外部類的引用
  @Override
  protected void onDestroy() {
    super.onDestroy();
    mHandler.removeCallbacksAndMessages(null);

  }

 
  //Handler源碼中removeCallbacksAndMessages()注釋含義
  /**
   * Remove any pending posts of callbacks and sent messages whose
   * <var>obj</var> is <var>token</var>. If <var>token</var> is null,
   * all callbacks and messages will be removed.
   */
  public final void removeCallbacksAndMessages(Object token) {
    mQueue.removeCallbacksAndMessages(this, token);
  }

靜態(tài)內(nèi)部類+弱引用

  private static class AppHandler extends Handler {
    //弱引用,在垃圾回收時,被回收
    WeakReference<Activity> activity;

    AppHandler(Activity activity){
      this.activity=new WeakReference<Activity>(activity);
    }

    public void handleMessage(Message message){
      switch (message.what){
        //todo
      }
    }
  }

5. 其他:

即使內(nèi)存泄漏了。待handler中的消息處理完。下次GC時即可回收本次未回收的內(nèi)存。

以上就是Android Handler內(nèi)存泄漏原因及解決方案的詳細內(nèi)容,更多關于Android Handler內(nèi)存泄漏的資料請關注腳本之家其它相關文章!

相關文章

最新評論

渭源县| 阜新市| 涪陵区| 巴林左旗| 小金县| 个旧市| 同仁县| 英吉沙县| 阿巴嘎旗| 铜山县| 绥中县| 兴城市| 长白| 武功县| 鄯善县| 禄丰县| 贵港市| 无棣县| 道孚县| 怀远县| 威宁| 稻城县| 郧西县| 瑞安市| 金溪县| 翼城县| 兴仁县| 繁昌县| 仁布县| 福鼎市| 藁城市| 张家界市| 武夷山市| 泸水县| 嘉定区| 鄯善县| 彰武县| 广宁县| 宁强县| 阜宁县| 千阳县|