亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

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

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

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

    關于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),那么調用如下方法即可

    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>

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

相關文章

  • Android實現(xiàn)圖文垂直跑馬燈效果

    Android實現(xiàn)圖文垂直跑馬燈效果

    這篇文章主要為大家詳細介紹了Android實現(xiàn)圖文垂直跑馬燈效果,圖文結合的跑馬燈效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • Android開發(fā)之AppWidget詳解

    Android開發(fā)之AppWidget詳解

    這篇文章主要介紹了Android開發(fā)之AppWidget詳解,想了解桌面程序AppWidget的同學可以參考下
    2021-04-04
  • Kotlin中內置函數(shù)的用法和區(qū)別總結

    Kotlin中內置函數(shù)的用法和區(qū)別總結

    眾所周知相比Java, Kotlin提供了不少高級語法特性。對于一個Kotlin的初學者來說經常會寫出一些不夠優(yōu)雅的代碼。下面這篇文章主要給大家介紹了關于Kotlin中內置函數(shù)的用法和區(qū)別的相關資料,需要的朋友可以參考下
    2018-06-06
  • Android自定義帶圓角的ImageView

    Android自定義帶圓角的ImageView

    這篇文章主要為大家詳細介紹了Android自定義帶圓角的ImageView,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • Android自定義Dialog內部透明、外部遮罩效果

    Android自定義Dialog內部透明、外部遮罩效果

    這篇文章主要為大家詳細介紹了Android自定義Dialog內部透明、外部遮罩效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-10-10
  • Android指紋識別功能

    Android指紋識別功能

    這篇文章主要為大家詳細介紹了Android指紋識別功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • Android基于Fresco實現(xiàn)圓角和圓形圖片

    Android基于Fresco實現(xiàn)圓角和圓形圖片

    這篇文章主要為大家詳細介紹了Android基于Fresco實現(xiàn)圓角和圓形圖片,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • Android自定義DataGridView數(shù)據(jù)表格控件

    Android自定義DataGridView數(shù)據(jù)表格控件

    這篇文章主要介紹了Android自定義DataGridView數(shù)據(jù)表格控件的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • Android 換膚技術資料整理

    Android 換膚技術資料整理

    這篇文章主要介紹了 Android 換膚技術總結的相關資料,需要的朋友可以參考下
    2017-03-03
  • Android基礎開發(fā)小案例之短信發(fā)送器

    Android基礎開發(fā)小案例之短信發(fā)送器

    這篇文章主要為大家詳細介紹了Android基礎開發(fā)小案例之短信發(fā)送器的具體實現(xiàn)代碼,感興趣的小伙伴們可以參考一下
    2016-05-05

最新評論