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

Android中內(nèi)存泄漏需要的注意點

 更新時間:2019年06月06日 14:19:27   投稿:laozhang  
在本篇文章里小編給大家整理了關(guān)于Android中內(nèi)存泄漏需要的注意點的相關(guān)內(nèi)容,有此需要的朋友們參考下。

內(nèi)存泄漏對每一位 Android 開發(fā)一定是司空見慣,大家或多或少都肯定有些許接觸。大家都知道,每一個手機都有一定的承載上限,多處的內(nèi)存泄漏堆積一定會堆積如山,最終出現(xiàn)內(nèi)存爆炸 OOM。

而這,也是極有可能在 Android 面試中一道常見的開放題。

內(nèi)存泄漏的根本原因是一個長生命周期的對象持有了一個短生命周期的對象。如果你對垃圾回收機制有所了解,我想這個問題基本難不住你,因為知道了原理,自然不會去觸碰這些極易導致內(nèi)存泄漏的雷區(qū)。

該題重在積累,不需要死記硬背,自己多總結(jié)即可。

1. 長生命周期對象持有 Activity

這基本是最常見的內(nèi)存泄漏了,比如

內(nèi)部類形式使用 Handler 同時發(fā)送延時消息,或者在 Handler 里面執(zhí)行耗時任務,在任務還沒完成的時候 Activity 需要銷毀。這時候由于 Handler 持有 Activity 的強引用導致 Activity 無法被回收。

同理內(nèi)部類形式的使用 AsyncTask 執(zhí)行耗時任務也會導致內(nèi)存泄漏的發(fā)生。

單例作為最長生命周期的對象,自然不應該持有 Activity 從而導致內(nèi)存泄漏發(fā)生;

針對上面這種情況,基本不必多說了,不要使用內(nèi)部類或者匿名內(nèi)部類做這樣的處理就好了,實際上 IDE 也會彈出警告,我想大家應該還是都知道采用靜態(tài)內(nèi)部類或者在銷毀頁面的時候使用相關(guān)方法移除處理的。

Activity 中匿名使用 Handler 實際上會導致 Handler 內(nèi)部類持有外部類的引用,而 SendMessage() 的時候 Message 會持有 Handler,enqueueMessage 機制又會導致 MeassageQueue 持有 Message。所以當發(fā)送的是延遲消息那么 Message 并不會立即的遍歷出來處理而是阻塞到對應的 Message 觸發(fā)時間以后再處理。那么阻塞的這段時間中頁面銷毀一定會造成內(nèi)存泄漏。

2. 各種注冊操作沒有對應的反注冊

這一點基本不必多說,相信大家剛剛開始學習廣播和 Service 的時候一定對此有所接觸,然后就是比如我們常用的第三方框架 EventBus 也是一樣的。平時使用的時候注意在對應的生命周期方法中進行反注冊。

3. Bitmap 使用完沒有注意 recycle()

Bitmap 作為大對象,在使用完畢一定要注意調(diào)用 recycle() 進行回收。TypedArray 、Cursor、各種流同理,一定要在最后調(diào)用自己的回收關(guān)閉方法處理。

4. WebView 使用不當

WebView 是非常常用的控件,但稍有不注意也會導致內(nèi)存泄漏。內(nèi)存泄漏的場景: 很多人使用 Webview 都喜歡采用布局引用方式, 這其實也是作為內(nèi)存泄漏的一個隱患。當 Activity 被關(guān)閉時,Webview 不會被 GC 馬上回收,而是提交給事務,進行隊列處理,這樣就造成了內(nèi)存泄漏, 導致 Webview 無法及時回收。

目前所知的比較安全的方案是:

在布局中動態(tài)添加 WebView。

采用下面的方法。

override fun onDestroy() {
  webView?.apply {
    val parent = parent
    if (parent is ViewGroup) {
      parent.removeView(this)
    }
    stopLoading()
    // 退出時調(diào)用此方法,移除綁定的服務,否則某些特定系統(tǒng)會報錯
    settings.javaScriptEnabled = false
    clearHistory()
    removeAllViews()
    destroy()
  }
}

5. 循環(huán)引用

循環(huán)引用導致內(nèi)存泄漏比較少見,正常來講不會有人寫出 A 持有 B,B 持有 C,C 又持有A 這樣的代碼,不過總還是需要注意。

總的來說,內(nèi)存泄漏很常見,但檢測方式也很多。我們的 Android Studio 自帶的 Monitors 就可以幫我們找到大部分內(nèi)存問題,當然我們也可以采用譬如 LeakCanary 這樣的庫去做檢測。

相關(guān)文章

  • Android擴大View點擊范圍的方法

    Android擴大View點擊范圍的方法

    Android4.0設(shè)計規(guī)定的有效可觸摸的UI元素標準是48dp,轉(zhuǎn)化為一個物理尺寸約為9毫米。7~10毫米,這是一個用戶手指能準確并且舒適觸摸的區(qū)域。本文將介紹Android擴大View點擊范圍的方法
    2021-05-05
  • Android 源碼淺析RecyclerView ItemAnimator

    Android 源碼淺析RecyclerView ItemAnimator

    這篇文章主要為大家介紹了Android 源碼淺析RecyclerView ItemAnimator,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-12-12
  • Android中監(jiān)聽未接來電的2種方法

    Android中監(jiān)聽未接來電的2種方法

    這篇文章主要介紹了Android中監(jiān)聽未接來電的2種方法,本文講解了使用廣播接收器 BrocastReceiver和使用 PhoneStateListener二種方法,需要的朋友可以參考下
    2015-04-04
  • Android控件之CheckBox、RadioButton用法實例分析

    Android控件之CheckBox、RadioButton用法實例分析

    這篇文章主要介紹了Android控件之CheckBox、RadioButton用法,以實例形式較為詳細的分析了CheckBox和RadioButton實現(xiàn)復選按鈕及單選按鈕功能的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-09-09
  • Android編程實現(xiàn)自定義手勢的方法詳解

    Android編程實現(xiàn)自定義手勢的方法詳解

    這篇文章主要介紹了Android編程實現(xiàn)自定義手勢的方法,結(jié)合實例形式分析了Android自定義手勢的功能、相關(guān)函數(shù)與具體實現(xiàn)步驟,需要的朋友可以參考下
    2016-10-10
  • Android UniversalVideoView實現(xiàn)視頻播放器

    Android UniversalVideoView實現(xiàn)視頻播放器

    這篇文章主要為大家詳細介紹了Android UniversalVideoView實現(xiàn)視頻播放器,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • Android實現(xiàn)動態(tài)高斯模糊背景效果

    Android實現(xiàn)動態(tài)高斯模糊背景效果

    在現(xiàn)代 Android UI 中,動態(tài)高斯模糊背景 常見于對話框或彈窗后面的模糊遮罩,相比靜態(tài)模糊圖,動態(tài)模糊可隨著內(nèi)容滾動或變化實時更新,使界面更具層次感與沉浸感,所以本文給大家介紹了Android實現(xiàn)動態(tài)高斯模糊背景效果,需要的朋友可以參考下
    2025-04-04
  • 利用Flutter制作一個摸魚桌面版App

    利用Flutter制作一個摸魚桌面版App

    Win10商店上架了一款名為《摸魚》的App,在下載打開之后,這個App會讓你的電腦進入一個假更新的畫面。本文將為大家介紹如何通過Flutter制作一個桌面版的摸魚APP,快跟小編一起學習一下吧
    2021-12-12
  • 淺談Android AsyncTask內(nèi)存安全的一種使用方式

    淺談Android AsyncTask內(nèi)存安全的一種使用方式

    這篇文章主要介紹了淺談Android AsyncTask內(nèi)存安全的一種使用方式,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-08-08
  • Android利用HorizontalScrollView仿ViewPager設(shè)計簡單相冊

    Android利用HorizontalScrollView仿ViewPager設(shè)計簡單相冊

    這篇文章主要介紹了Android利用HorizontalScrollView仿ViewPager設(shè)計簡單相冊的相關(guān)資料,需要的朋友可以參考下
    2016-05-05

最新評論

湾仔区| 永安市| 屯门区| 原阳县| 临泽县| 永州市| 巴东县| 根河市| 泸西县| 灵台县| 称多县| 扎赉特旗| 新巴尔虎右旗| 黄龙县| 六安市| 夹江县| 儋州市| 彭阳县| 太谷县| 遵化市| 鸡东县| 正蓝旗| 神池县| 石楼县| 洛扎县| 那坡县| 新邵县| 五大连池市| 简阳市| 大邑县| 鄱阳县| 大洼县| 阳原县| 孟村| 阿荣旗| 遂溪县| 利川市| 且末县| 秦皇岛市| 延边| 公主岭市|