日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Android內存泄漏的原因及解決技巧

瀏覽:158日期:2022-09-21 10:59:33
正確的生命周期管理如何防止Android內存泄漏

OutOfMemoryException是一個常見的令人沮喪的錯誤,也是導致應用程序意外關閉的主要原因之一。

“如果應用程序昨天運行良好,為什么現在會發生這種情況?這個問題讓Android的開發者和新手都感到困惑。

導致OutOfMemory異常的潛在原因有很多種,但其中最常見的是內存泄漏—應用程序中的內存分配從未釋放。本文將解釋如何通過有效的生命周期管理(開發過程中一個重要但經常被忽視的部分)來最小化這種風險。

為什么安卓系統會發生內存泄漏?

問題很簡單。某些對象應該只有一個固定的壽命,當它們的使用壽命結束時,它們需要被刪除。

Android內存泄漏的原因及解決技巧

理論上,當進程使用onStop或onDestroy終止時,應該處理該內存。但是,濫用對象引用可能會阻止垃圾收集器釋放未使用的對象。例如:如果未使用的對象A引用了未使用的對象B,那么您將得到兩個不必要的對象,垃圾回收器將永遠不會釋放它們,因為它們正在相互引用。

阻止內存泄漏這種情況發生的常見技巧

開發人員可以采取許多步驟來阻止死的活動被困在內存中。

在onResume()/onPause()或onStart()/onStop()中注冊/注銷廣播接收器 不要對視圖/活動/上下文使用靜態變量 需要保存對上下文的引用的singleton應該使用applicationContext()或將其包裝到WeakReference中 注意匿名和非靜態內部類,因為它們包含對其封閉類的隱式引用。 如果要比父類(如處理程序)更長壽,請使用靜態內部類而不是匿名類。 如果內部或匿名類是可取消的(如AsyncTask、Thread、RxSubscriptions),則在銷毀活動時取消它。 Android生命周期感知組件

一旦你完成了上面的基本步驟,現在是時候做一些更重要的事情了:應用程序活動的生命周期。如果我們不能正確地管理生命周期,我們最終會在不再需要內存的時候掛掉它。

這涉及到許多不同的任務。對于每個活動,我們需要中斷線程,去掉RxJava中的訂閱,取消AsyncTask引用,并確保正確刪除該活動的引用(以及與之相關的任何其他活動)。所有這些任務都會消耗開發人員的大量時間。

模型視圖呈現器(MVP)使事情變得更加復雜,MVP是Android中構建用戶界面的常用架構模式。然而,MVP對于從視圖中分離業務邏輯非常有用。

在MVP模式中,View和Presenter都是它們之間行為契約的抽象實現。實現MVP最常見的方法是使用活動/片段作為視圖的實現,并為習慣于引用視圖的演示者使用簡單的實現。

所以我們最終得到了一個帶有Presenter引用的視圖和一個帶有視圖引用的Presenter(提示:這里有一個潛在的漏洞)。

考慮到這些潛在的困難,我們有必要建立一個適當的管理結構來移除在生命周期中創建的多余內存。有幾種行之有效的方法可以做到這一點:

1. 在Android Studio上使用Android Arch Lifecycle創建支持生命周期的組件

生命周期感知組件是智能的。例如,它們可以通過除去內存來對另一個組件(如活動或片段)的生命周期狀態的更改作出反應。這意味著代碼更輕,內存效率更高。

archlifecycle是Android的一個新庫,它提供了一組工具來構建支持生命周期的組件。庫以抽象的方式工作,這意味著生命周期所有者不再需要擔心管理特定任務和活動的生命周期。

Arch生命周期的關鍵工具和定義如下:

生命周期:一個排序系統,它定義了哪些對象具有Android生命周期,并允許對它們進行監視。 LifecycleObserver:一個常規接口,它監視每個被標識為具有Android生命周期的對象,使用一個簡單的公式來處理每個密鑰生命周期事件。 @OnLifecycleEvent:可以在實現LifecycleObserver接口的類中使用的注釋。它允許我們設置關鍵生命周期事件,這些事件將在每次啟動時觸發帶注釋的方法。以下是可設置的所有事件的列表:ON_ANY、ON_CREATE、ON_DESTROY、ON_PAUSE、ON_RESUME、ON_START、ON_STOP LifecycleOwner默認為每個可以管理其生命周期的Android組件實現,并讓開發人員控制每個事件。

使用這些工具,我們可以將所有干凈的任務發送給它們的所有者(在我們的例子中是演示者),這樣我們就有了一個干凈的、無泄漏的解耦代碼(至少在演示者層是這樣)。

下面是一個超級基本的實現,向您展示我們所說的:

interface View: MVPView, LifecycleOwnerclass RandomPresenter : Presenter<View>, LifecycleObserver { private lateinit var view: View override fun attachView(view: View) { this.view = view view.lifecycle.addObserver(this) } @OnLifecycleEvent(Lifecycle.Event.On_DESTROY) fun onClear() {//TODO: clean }2. 使用Android架構視圖模型作為演示者和LiveData

另一種方法是通過使用新的生命周期組件來避免視圖模型的內存泄漏。

ViewModel是一個抽象類,它實現一個稱為onClear的函數,當必須刪除某個特定對象時,該函數會自動調用。ViewModel是由框架生成的,它附加到創建者的生命周期中(作為一個額外的好處,使用Dagger注入非常容易)

除了使用ViewModel,LiveData還提供了一個重要的通信渠道。這意味著創造了一個容易觀察到的反應性產物。

這里最重要的一點是,生命周期所有者可以觀察到LiveData,因此數據傳輸總是由生命周期管理的,而且我們可以確保在使用它們時保留任何引用。

3. 使用LeakCanary和Bugfender

Android內存泄漏的原因及解決技巧

除了上述步驟之外,我們還想推薦兩個重要的工具包:LeakCanary,一個用于監視泄漏的流行工具,以及我們自己的Bugfender。

LeakCanary是一個用于Android和Java的內存檢測庫。它是開源的,所以有一個龐大的社區支持它,它不僅僅告訴你一個漏洞,它還告訴你可能的原因。

我們的遠程日志工具Bugfender允許您調試單個泄漏跟蹤,并擴展一個名為DisplayLeakService的類,它讓我們知道何時發生泄漏。然后我們就可以用Bugfender輕松登錄了。

public class LeakUploadService extends DisplayLeakService { override fun afterDefaultHandling(heapDump: HeapDump, result: AnalysisResult, leakInfo: String) { if (result.leakFound) { Bugfender.d(“LeakCanary”, result.toString()) } }}

此外,用戶還可以獲得Bugfender的所有其他好處,包括全天候記錄日志(即使設備離線)、內置故障報告和易于使用的web控制臺。

以上就是Android內存泄漏的原因及解決技巧的詳細內容,更多關于Android內存泄漏的資料請關注好吧啦網其它相關文章!

標簽: Android
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
蜜桃91丨九色丨蝌蚪91桃色| 亚洲免费一区三区| 麻豆精品av| 国产乱码精品一区二区三区四区 | 日韩欧美中文| 黄色在线观看www| 久久天堂精品| 欧美a级片一区| 老鸭窝毛片一区二区三区| 蜜臀久久久99精品久久久久久| 石原莉奈一区二区三区在线观看| 亚洲一区av| 国产日产精品_国产精品毛片 | 国产成人精品亚洲线观看| 国产一二在线播放| 精品一区在线| 亚洲精品成a人ⅴ香蕉片| 国产日韩免费| 日韩久久精品网| 亚洲欧美日韩国产| 免费人成精品欧美精品| 欧美天堂在线| 国产+成+人+亚洲欧洲在线| 久久久777| 在线精品一区二区| 精品中文在线| 欧美va天堂| 色8久久久久| 久久精品国产网站| 蜜桃tv一区二区三区| 日韩影院精彩在线| 免费看久久久| 亚洲欧美日韩高清在线| 日韩国产在线一| 日韩综合在线| 好看不卡的中文字幕| 日本欧美在线| 日韩在线二区| 色8久久久久| 亚洲午夜天堂| 亚洲精品第一| 精品三级久久| 色综合视频一区二区三区日韩 | 美女视频黄免费的久久| 欧美在线观看视频一区| 日本综合视频| 天堂中文av在线资源库| 亚洲专区视频| 日韩电影免费网站| 日韩中文字幕无砖| 狠狠久久伊人中文字幕| 六月天综合网| 黄色在线观看www| 亚洲区第一页| 99视频精品全国免费| 久久精品 人人爱| 亚洲精品97| 欧美91在线| 中文字幕一区二区av| 亚洲播播91| 7777精品| 欧美日韩国产传媒| 欧美黄色一区| 日韩专区在线视频| 亚洲黄色免费av| 日韩av网站在线免费观看| 国产主播一区| 久久精品国产99国产| 伊人精品久久| 成人精品天堂一区二区三区| 日韩av一区二区三区四区| 欧美精品一二| 国产精品精品| 欧美日韩夜夜| 另类激情亚洲| 久久五月天小说| 精品国产黄a∨片高清在线| 欧美日韩国产传媒| 日韩大片免费观看| 欧美精品国产白浆久久久久| 91久久视频| 久久一区欧美| 色8久久久久| 美女精品在线| 91精品久久久久久久久久不卡| 国产美女精品视频免费播放软件| 久久av一区| 久久精品青草| 国产成人精品福利| 国产精品15p| 少妇精品久久久一区二区三区| 久久国产小视频| 国产精品毛片久久| 精品日本视频| 久久在线91| 青青草伊人久久| 丝袜美腿一区二区三区| 一级欧洲+日本+国产| 免费污视频在线一区| 国产成人77亚洲精品www| 国产麻豆一区| 欧美色综合网| 国产精品综合色区在线观看| 日韩av网站免费在线| 亚洲精品极品| 综合亚洲色图| 蜜臀久久99精品久久久久久9| 欧美日韩国产免费观看| 免费精品国产的网站免费观看| 日韩国产在线| 97精品国产一区二区三区| 久久香蕉精品香蕉| 国语精品一区| 久久男人天堂| 日韩欧美一区二区三区免费看| www在线观看黄色| 亚洲女同av| 久久中文字幕av一区二区不卡| 99精品综合| 九九综合九九| 亚洲欧美日韩在线观看a三区| 黄色成人在线网址| 午夜亚洲福利在线老司机| 尤物在线精品| 石原莉奈在线亚洲二区| 蜜臀久久99精品久久久久宅男| 男人的天堂亚洲一区| 中文字幕免费精品| 青草久久视频| 国产激情一区| 97国产成人高清在线观看| 国产成人精品亚洲日本在线观看| 蜜臀久久精品| 亚洲深爱激情| 综合亚洲视频| 国产精品一国产精品k频道56| 国产精品3区| 亚洲最新无码中文字幕久久| 91精品在线观看国产| 亚洲国产日韩欧美在线| 亚洲一区久久| 日韩欧美激情电影| 精品99久久| 欧美jjzz| 日韩一区二区三区精品| 国产精品亚洲人成在99www| 精品九九在线| 99国产精品视频免费观看一公开 | 伊人久久婷婷| 亚洲精品大片| 精品美女在线视频| 91精品久久久久久久久久不卡| 蜜桃成人av| 日韩欧美三区| 日韩中文在线电影| 蜜桃伊人久久| 国产精品一区高清| 天堂av在线| 美女尤物久久精品| 国产精品qvod| 欧美/亚洲一区| 日韩精品视频一区二区三区| 久久精品国产一区二区| 欧美日韩激情在线一区二区三区| 亚洲免费毛片| 麻豆传媒一区二区三区| 婷婷亚洲五月色综合| 少妇精品久久久一区二区| 麻豆传媒一区二区三区| 欧美精品一区二区三区精品| 日韩av电影一区| 超碰在线99| 日韩一区精品字幕| 成人在线视频区| 视频一区欧美精品| 精品三级国产| 天使萌一区二区三区免费观看| 国产欧美一级| 成人av二区| 久久国产精品美女| 欧美精品一卡| 久久精品理论片| 亚洲欧美日韩国产综合精品二区| 国产精品白丝av嫩草影院| 免费毛片在线不卡| 免费在线日韩av| 国产精品日韩| 色综合狠狠操| 日韩毛片一区| 国产99亚洲| 欧美精品二区| 免费国产亚洲视频| 免费福利视频一区二区三区| 日韩精品国产欧美| 欧美va亚洲va日韩∨a综合色| 国产精品成人**免费视频| 日韩一级精品| 不卡专区在线| 国产欧美视频在线| 久久夜色精品|