安卓 Handler引起的記憶體洩漏

2021-07-15 00:02:59 字數 529 閱讀 8569

myhandler(activity activity) 

@override

public void handlemessage(message msg)

}

}

將**改為以上形式之後,就算完成了。

還有一種就是當activity銷毀的時候,也就是在ondestroy()方法裡加上:mhandler.removecallbacksandmessages(null);

延伸:什麼是weakreference?

weakreference弱引用,與強引用(即我們常說的引用)相對,它的特點是,gc在**時會忽略掉弱引用,即就算有弱引用指向某物件,但只要該物件沒有被強引用指向(實際上多數時候還要求沒有軟引用,但此處軟引用的概念可以忽略),該物件就會在被gc檢查到時**掉。對於上面的**,使用者在關閉activity之後,就算後台執行緒還沒結束,但由於僅有一條來自handler的弱引用指向activity,所以gc仍然會在檢查的時候把activity**掉。這樣,記憶體洩露的問題就不會出現了。

安卓的handler機制

一 定義 handler是訊息處理的機制,很多耗時的操作,如訪問網路 i o操作等不能在主線程中執行,而這些操作又與ui的變化相關聯。常常採用由子執行緒完成操作,傳送訊息使切換到主線程更新ui的辦法。當然也可以用來獲取資料等。與handle相關的類 message 訊息 messagequeue 訊...

STM SETIMAGE引起的gdi記憶體洩露

最近給程式加了乙個動畫功能後,發現程式會引起及其嚴重的記憶體洩露,找了半天發現是呼叫stm setimage引起的。素以在此將使用stm setimage遇到的問題記錄一下。我的程式將動畫的所有幀提前載入後用定時器迴圈用stm setimage把點陣圖控制代碼傳送到視窗顯示,發現沒顯示一次就洩露好幾...

C 反射呼叫WebService引起記憶體洩漏

最近寫了乙個小工具,用來定時檢測公司各台伺服器上的webservice是否工作正常.如果無法訪問則報警.開發思路也很簡單,設定乙個timer,定時啟動多個執行緒 每個執行緒負責n臺伺服器訪問任務 去動態訪問各伺服器上的webservice的指定方法.然後對異常資訊進行報警.動態訪問webservic...