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

Android Handler leak分析及解決辦法詳解

 更新時間:2017年03月13日 10:14:55   投稿:lqh  
這篇文章主要介紹了Android Handler leak分析及解決辦法詳解的相關(guān)資料,需要的朋友可以參考下

Android Handler leak 分析及解決辦法

 In Android, Handler classes should be static or leaks might occur, Messages enqueued on the application thread's MessageQueue also retain their target Handler. If the Handler is an inner class, its outer class will be retained as well. To avoid leaking the outer class, declare the Handler as a static nested class with a WeakReference to its outer class.

    在Android中,Handler類應(yīng)該是靜態(tài)的,否則,可能發(fā)生泄漏。在應(yīng)用程序線程的MessageQueue中排隊的Message對象 還保留他們的目標Handler。如果Handler是一個內(nèi)部類(注:無論是匿名還是非匿名,匿名是比較常見用法),它的外部類將被保留(至于為什么, 請參考Java嵌套類相關(guān)說明)。為了避免泄漏外部類,聲明一個Handler子類為靜態(tài)內(nèi)部類(注:這樣就避免了Handler對象對外部類實例的自動引用),其內(nèi)部持有一個對外部類對象的WeakReference。

    上面是HandlerLeak的詳細解釋,同時下劃線部分也提供了解決方案的思路。我們需要再分析一下幾個泄漏問題:(1) 排隊中的Message對象對Handler的持有導(dǎo)致泄漏;(2)Handler對象對外部類(如Activity或Service)實例的強引用持 有。是由于這兩個原因同時作用導(dǎo)致出現(xiàn)泄漏的可能。我們的解決方案可以從原因出發(fā),清除這兩個原因,就會比較完整的解決這個問題。

    方案:(1)針對第1個原因,在使用Handler的組件生命周期結(jié)束前清除掉MessageQueue中的發(fā)送給Handler的Message對象(例如在Activity或Service的onDestroy()中調(diào)用Handler的remove*方法);(2)針對第2個原因,Handler的實現(xiàn)類采用靜態(tài)內(nèi)部類的方式,避免對外部類的強引用,在其內(nèi)部聲明一個WeakReference引用到外部類的實例。

    關(guān)于Handler的remove*方法,這兒介紹一下(可以參考源碼或文檔)

removeCallbacks(Runnable r) ——清除r匹配上的Message。

removeCallbacks(Runnable r, Object token) ——清除r匹配且匹配token(Message.obj)的Message,token為空時,只匹配r。

removeCallbacksAndMessages(Object token) ——清除token匹配上的Message。

removeMessages(int what) ——按what來匹配

removeMessages(int what, Object object) ——按what來匹配

我們更多需要的是清除以該Handler為target的所有Message(包括Callback),那么調(diào)用如下方法即可

    handler.removeCallbacksAndMessages(null);

    最終代碼像下面這樣

package org.dragonboy.example;
 
import java.lang.ref.WeakReference;
 
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
 
/**
 * @author dragonboyorg@qq.com
 */
public class MyActivity extends Activity {
  private MyHandler mHandler;
 
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
 
    mHandler = new MyHandler(this);
  }
 
  @Override
  protected void onDestroy() {
    // Remove all Runnable and Message.
    mHandler.removeCallbacksAndMessages(null);
 
    super.onDestroy();
  }
 
  static class MyHandler extends Handler {
    // WeakReference to the outer class's instance.
    private WeakReference<myactivity> mOuter;
 
    public MyHandler(MyActivity activity) {
      mOuter = new WeakReference<myactivity>(activity);
    }
 
    @Override
    public void handleMessage(Message msg) {
      MyActivity outer = mOuter.get();
      if (outer != null) {
        // Do something with outer as your wish.
      }
    }
  }
}
</myactivity></myactivity>

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關(guān)文章

  • Android操作系統(tǒng)介紹之11種傳感器

    Android操作系統(tǒng)介紹之11種傳感器

    Android是一種基于Linux的自由及開放源代碼的操作系統(tǒng),主要使用于移動設(shè)備,如智能手機和平板電腦,Android是一種基于Linux的自由及開放源代碼的操作系統(tǒng),主要使用于移動設(shè)備,如智能手機和平板電腦,非常不錯,具有參考借鑒價值,感興趣的朋友一起學習吧
    2016-07-07
  • Android繪制旋轉(zhuǎn)動畫方法詳解

    Android繪制旋轉(zhuǎn)動畫方法詳解

    這篇文章主要介紹了Android如何采用RotateAnimation繪制一個旋轉(zhuǎn)動畫,文中的實現(xiàn)方法講解詳細,感興趣的小伙伴可以跟隨小編一起試一試
    2022-01-01
  • 常見android app加固廠商脫殼方法研究

    常見android app加固廠商脫殼方法研究

    這篇文章主要介紹了常見android app加固廠商脫殼方法研究,需要的朋友可以參考下
    2018-01-01
  • Android實現(xiàn)探探圖片滑動效果

    Android實現(xiàn)探探圖片滑動效果

    這篇文章主要為大家詳細介紹了Android實現(xiàn)探探圖片滑動效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • Android調(diào)用系統(tǒng)圖庫獲取圖片的方法

    Android調(diào)用系統(tǒng)圖庫獲取圖片的方法

    這篇文章主要為大家詳細介紹了Android調(diào)用系統(tǒng)圖庫獲取圖片,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • 在Android Studio中設(shè)置Button透明度的方法詳解

    在Android Studio中設(shè)置Button透明度的方法詳解

    本文將介紹在Android Studio中如何設(shè)置Button的透明度,首先,我們將展示實現(xiàn)該功能的整個流程,并使用表格列出每個步驟,然后,我們將詳細說明每個步驟需要做什么,并提供相應(yīng)的代碼和注釋,需要的朋友可以參考下
    2023-09-09
  • 深度剖析Android Binder IPC機制

    深度剖析Android Binder IPC機制

    Android系統(tǒng)的成功離不開其強大的IPC(Inter-Process Communication)機制,其中最引人注目的就是Binder,本文將深入探討B(tài)inder的技術(shù)原理,解釋其工作方式以及相關(guān)的關(guān)鍵概念
    2023-10-10
  • Android中Parcel用法詳解

    Android中Parcel用法詳解

    這篇文章主要介紹了Android中Parcel用法,結(jié)合實例形式較為詳細的分析了Parcel數(shù)據(jù)容器的原理與使用方法,需要的朋友可以參考下
    2016-06-06
  • 手機/移動前端開發(fā)需要注意的20個要點

    手機/移動前端開發(fā)需要注意的20個要點

    本文主要介紹了手機/移動前端開發(fā)需要注意的20個要點,具有很好的參考價值。下面跟著小編一起來看下吧
    2017-03-03
  • AndroidStudio3.6的卸載安裝,Gradle持續(xù)下載/Gradle Build失敗等問題

    AndroidStudio3.6的卸載安裝,Gradle持續(xù)下載/Gradle Build失敗等問題

    這篇文章主要介紹了AndroidStudio3.6的卸載安裝,Gradle持續(xù)下載/Gradle Build失敗等問題,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-03-03

最新評論

吴旗县| 资源县| 建瓯市| 东乡| 开化县| 理塘县| 嘉兴市| 惠东县| 绵阳市| 明水县| 阜宁县| 盘锦市| 衡阳市| 淮北市| 塘沽区| 鹤山市| 溧阳市| 中西区| 佛坪县| 句容市| 敖汉旗| 盐边县| 阿巴嘎旗| 神农架林区| 监利县| 南宫市| 米易县| 崇明县| 宁陕县| 项城市| 淳安县| 渝中区| 鹿邑县| 河北区| 林西县| 玉溪市| 建始县| 清镇市| 子长县| 宁阳县| 昭通市|