Handler記憶體洩露原因及解決方法

2021-10-10 20:35:41 字數 659 閱讀 8046

原因:

非靜態內部類(包括匿名內部類),預設就會持有外部類的引用,當非靜態內部類物件的生命週期比外部類物件的生命週期長時,就會導致記憶體洩漏。

三種解決方案:

1.把handler類放在單獨的類檔案中

2.靜態內部類+弱引用

3.activity不可見時,清空訊息佇列

new handler().postdelayed(new runnable() 

}, 5000);

這些細節都沒有注意到效能的優化。

一般情況這樣寫:

class myhandler extends handler 

}

然後在需要手動控制清除應用的時候這樣寫:

//比如:在activity不可見的時候

@override

protected void onstop()

當然這不是最好的寫法,也有人在例項化handler的時候把它搞成靜態的,這種可以達到高效的效果

還有一種寫法也可以達到高效的效果:

protected void onstop()
總結:handler的對activity的持有,看個人靈活應用吧,不同條件達到最優化

洩露記憶體之 handler的優化

兩個案例 handler mhandler new handler postdelayed handler引起記憶體洩露的原因 使用handler導致記憶體洩露的解決方法 方法一 通過程式邏輯來進行保護 方法二 將handler宣告為靜態類 static class myhandler extend...

記錄 關於匿名Handler記憶體洩露問題

rt 在inspect code中發現了某個記憶體洩露的提示 提示在這個activity類中可能存在記憶體洩露,如下 常規的handler寫法,此處看的有點蒙,為什麼會有記憶體洩露,於是度娘查了一下。在查明原因後,有兩種解決方案,如下 1 通過程式邏輯來進行保護,即removecallbacks 方...

Android記憶體溢位及記憶體洩漏原因進解析

記憶體溢位 out of memory android系統中每乙個應用程式可以向系統申請一定的記憶體,當申請的記憶體不夠用的時候,就產生了記憶體溢位。記憶體洩漏 當某個物件不再被使用,即不再有變數引用它時,該物件占用的記憶體就會被系統 當某個物件不再被使用,但是在其他物件中仍然有變數引用它時,該物件...