我有一個activity
這將啓動一個asynctask
(稱爲WorkerClass)和來自的AsyncTask我添加BaseAdapter
我GridView
:防止我的內存泄漏
if(gallery == null || switchScaleMode == true) {
myWorkerClass = new WorkerClass(myActivity.this, width, scaleButtonText);
myWorkerClass.execute();
}
:
我從活動開始的AsyncTask Gallery是一個可繪製的列表,它在我的gridview中顯示圖像。我知道把整個活動環境放到另一個班是非常糟糕的。但是我需要它在WorkerClass(AsyncTask)
中獲得2個視圖的訪問權限。因此,我的第一個問題是,如果我只是將2個視圖添加到WorkerClass
而不是整個活動,是否會阻止我的內存泄漏?
爲什麼我知道我的應用程序內有內存泄漏?
我在DDMS我的應用程序進程開始更新堆,並得到以下結果:
在啓動時,直到完全加載:
對我來說,這看起來像一個HIGHT如果開機後內存使用率> 90%,則爲金額..
現在,當我旋轉我的設備幾次我得到這個:(通知:我僅在啓動時啓動WorkerClass
並將適配器添加到GridView
一次。因爲我不想每次用戶旋轉(時間消耗)時重新計算(獲取圖像等)。
所以,如果我一次又一次地轉動我的設備我得到的一個的AsyncTask內存溢出異常。即使我只開始一次..(所以必須有某種娛樂的對象,導致OOM ??)
我不明白的是,如果我做了一個氣相色譜按鈕GC
在在DDMS我得到:
因此,這是使用我的進程的內存量有所增加?但不應該釋放使用內存的GC?
最後一個問題:我試圖使用eclipse中的MAT(Memory Analyzer Tool)。但這隻適用於在DDMS
啓動我的應用程序後才起作用。如果我旋轉它幾次,然後採取Heap Dump
「快照」日食不會做任何事情。沒有錯誤,但也沒有行動。我唯一注意到的是,我不能與下面的錯誤再次啓動Heap Dump
:
12-07 15:09:52.739: E/jdwp(1109): Failed sending b-req to debugger: Invalid argument (67536832 of 96983113)
12-07 15:09:53.759: E/jdwp(1109): Failed sending reply to debugger: Try again
請理解,我不什麼讓我的整個代碼公開。如果你特別告訴我你想看什麼,我會盡我所能。
更新
所以,現在我有一個堆轉儲一些旋轉後,這是輸出:
我實例的EditText和GridView在我的活動,在我WorkerClass
。因爲這是我在WorkerClass
中唯一需要的兩個視圖,以及爲什麼我會將我的Activity-Context
設置爲WorkerClass
。
那麼它會解決我的問題是,如果僅在活動中聲明並實例化它們並將它們傳遞給WorkerClass
。
更新2
的DominatorTree:
你是否正在處理你的drawable旋轉?此外,當你旋轉你可以忍受或停止你的異化? – Nazgul 2014-12-07 14:24:00
@Nazgul旋轉之後,我將它們放到「新」可用屏幕大小。我不取消這個asynctask,但它只需要大約1秒鐘就完成了。所以如果開始旋轉asynctask的實例應該完成! – MMike 2014-12-07 14:27:23
@Nazgul我的意思是我適合他們,但我不調整他們!如果縱向4圖像適合一行,在調整大小後,我可以將5個圖像放在一行中。 – MMike 2014-12-07 14:29:50