1. 程式人生 > >Android-Fragment 切換造成記憶體溢位,導致記憶體增長

Android-Fragment 切換造成記憶體溢位,導致記憶體增長

    當在Activity裡面有多個fragment的時候,來回切換fragment,會造成記憶體使用一直在增加。

    由於fragment在呼叫remove之後,裡面的view的引用導致記憶體回收不了,造成記憶體洩露,所以不斷的new Fragment切換之後,記憶體使用一直在增加。

    解決辦法:

            在BaseFragment類裡面的onDestroyView()方法裡面呼叫如下方法

 private void unbindDrawables(View view)
    {
        if (view.getBackground() != null)
        {
            view.getBackground().setCallback(null);
        }
        if (view instanceof ViewGroup && !(view instanceof AdapterView))
        {
            for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++)
            {
                unbindDrawables(((ViewGroup) view).getChildAt(i));
            }
            ((ViewGroup) view).removeAllViews();
        }
    }

例如:

 @Override
    public void onDestroyView() {
        super.onDestroyView();
        unbindDrawables(getView());
    }
如有錯誤,請指正。

相關推薦

Android-Fragment 切換造成記憶體溢位導致記憶體增長

    當在Activity裡面有多個fragment的時候,來回切換fragment,會造成記憶體使用一直在增加。    由於fragment在呼叫remove之後,裡面的view的引用導致記憶體回收不了,造成記憶體洩露,所以不斷的new Fragment切換之後,記憶體使

什麼情況下會發生堆記憶體溢位記憶體溢位結合例項說明

一、 棧溢位(StackOverflowError) 棧是執行緒私有的,他的生命週期與執行緒相同,每個方法在執行的時候都會建立一個棧幀,用來儲存區域性變量表,運算元棧,動態連結,方法出口燈資訊。區域性變量表又包含基本資料型別,物件引用型別(區域性變量表編譯器完成,執行期間不會

Jboss—java.lang.OutOfMemoryError:Metaspace (解決記憶體溢位擴大記憶體

講一講故事開頭吧,小菜自己覺得非常重要! 今天Jenkins構建專案後端成功,可怕的是到了伺服器上部署時就失敗了。開始拍錯,先是懷疑Jenkins在搗亂呢,因此在本地打包釋出,非常順利的成功了。把這個war包拿到伺服器上去部署,竟然失敗!排除Jenkins的嫌

C# 載入和傳遞圖片導致記憶體溢位的問題

      由C#向C++裡面傳遞影象的過程中,多載入幾次影象後,記憶體會暴漲,主要有兩個原因: 一、pictureBox的清理不能用pictureBox.Image=null清除,而應該使用,pictureBox1.Image.Dispose()。 二、B

介面資料量太大導致記憶體溢位解決辦法

通常我們使用介面呼叫資料總是返回一段我們需要的資訊,或者是json 格式資訊,通過接收將資料儲存到程式當中,再對接收到的資料進行轉換成對應的模型格式 。目前遇到的問題是接收的資料量過於巨大,導致完整接收將導致記憶體溢位,無法進行接下去的工作 。 解決辦法: 我們將資料儲存到本地檔案 ,再通過

淺談Android多圖(包括大圖)上傳時的記憶體處理防止記憶體溢位

Android多圖上傳時,為了防止記憶體溢位,基本只要做好兩點就好了,一是及時釋放已經上傳完的圖片,以及在對圖片處理時,必須是一張一張來,因為對圖片的處理過程是最容易OOM的。 下面有簡單的程式碼說明下, 1、首先,圖片的model, ImageBean model中

android Fragment與Activity交互互相發數據(附圖具體解釋)

oncreate @+ targe save inflate find enter 提交 ransac 筆者最近看官方training。發現了非常多實用又好玩的知識。當中。fragment與Activity通信就是一個。 fragment與Activity通信主要

linux跟目錄記憶體爆滿導致伺服器上專案經常卡停

廢話不多說,直接進入正題 ---------------------------------------------------------------------------------------------------------------------------------------

tomcat記憶體溢位修改設定。-Xss256m -Xms512m -Xmx800m -XX:MaxPermSize=512m

問題描述: 1. java.lang.OutOfMemoryError: Java heap space          JVM堆的設定是指java程式執行過程中JVM可以調配使用的記憶體空間的設定.JVM在啟動的時候會自動設定Heap

記憶體溢位記憶體洩漏記憶體抖動

記憶體溢位,記憶體洩漏,記憶體抖動你都碰到過嗎?怎麼解決的?如何區分這幾種情況?怎麼解決由記憶體洩漏而導致的記憶體溢位? 記憶體優化 . 記憶體洩露 記憶體溢位 記憶體抖動 分析與解決 記憶體溢位和記憶體洩漏的區別、產生原因以及解決方案 一、記憶體溢位: (一)、定義: 記憶體溢

android fragment 切換時上下層檢視點選區域衝突

在使用fragment 動態add  或者replace fragment 後碰到過點選空白區域響應   add 或者replace 之前的 UI 或者fragment裡的點選事件 ,導致異常操作! 在android-support-v4 中FragmentPager

ThinkPHP3.2 記憶體不足導致伺服器掛機

最近專案中,執行tp專案的apache伺服器更加頻繁的宕機,今天查閱了下資料,說這個記憶體不足導致的。 形成原因:thinkphp在程序執行過程中,會觸發記錄日誌(log.class.php的record的方法),在記錄系統日誌時,thinkphp先是給所有日誌資訊記錄在記憶體裡(log.class.php

安卓Handler當做內部類導致記憶體洩露的問題

this handler should be static or leaks might occur   How to Leak a Context: Handlers & Inner Classes Context是怎麼洩露的:Handlers & In

記憶體洩漏記憶體溢位ANR

Android記憶體洩漏的檢測流程、捕捉以及分析 通常記憶體洩漏的隱藏性質比較強,不同於異常導致的程式Crash,在異常導致的Crash中,我們能夠及時的發現程式問題的存在,並通過log日誌定位到問題所在的具體位置,然後及時進行解決,而記憶體洩漏則不同,在APP中存在記

Android Fragment 在返回棧popBackStack() 返回時onResume問題

我們在用Fragment的時候,有時會將fragment加入到返回棧中 mgrFragment.beginTransaction().add(R.id.fl_home, frgNearby).addToBackStack(null).commitAllow

Myeclipse10記憶體溢位tomcat啟動不溢位

myeclipse.ini裡配置後 1、設定Default VM Arguments 在myEclipse中,開啟Windows-> Preferences->Java->Installed JREs->點選正在使用的JDK->Edit-&g

myeclipse啟動tomcat記憶體溢位或tomcat記憶體溢位問題解決辦法

        最近專案開發中老是遇到啟動專案後報記憶體溢位,首先我們要確定問題所在,MyEclipse啟動Tomcat無視catalina.bat中設定記憶體大小,所以說如果用myeclipse啟動tomcat記憶體溢位,而tomcat直接啟動不報錯的話,一定是MyEcl

(node.js)webpack打包報javaScript heap out of memory,記憶體溢位如何解決

基於vue的專案在執行npm run dev的時候會報記憶體溢位,所以查了一些相關的資料總結了一下,下面會詳細說明這個問題具體怎麼解決。首先看我模擬出的報錯內容具體截圖如下: 裡面有句關鍵的話,CALL_AND_RETRY_LAST Allocation failed - JavaScri

Tomcat 記憶體溢位堆疊配置各種調整

部分參說明: -server:一定要作為第一個引數,在多個CPU時效能佳 -Xms:初始Heap大小,使用的最小記憶體,cpu效能高時此值應設的大一些 -Xmx:java heap最大值,使用的最大記憶體 -XX:PermSize:設定記憶

建立ExecutorService並行處理任務導致記憶體不足

利用ExecutorService建立的執行緒池並行地處理任務,可以節省總的等待時間(總等待時間等於耗時最多的那個任務的耗時)。不過執行緒池不會被自動地釋放。所以要麼建立一次執行緒池之後重複地使用,要麼每次使用完之後顯式地釋放掉。不然的話最終會導致記憶體被用光。 問題現象