2014-06-06 57 views
5

我已經下載應用程序數據目錄中的100個圖像存儲其工作正常 但我已經下載更多的圖像,然後增加堆大小問題即將到來,應用程序已關閉。我已刪除所有對象,對象的值定義爲空和窗口也關閉但結果是一樣的。如何清除Android中鈦應用程序中的堆大小?

ERROR:生長堆(FRAG情況下),以14.687MB爲517197字節分配

像核Android的System.gc(); 那麼鈦的選擇是什麼

+0

你能提供的代碼? – 0101

回答

0

據我所知,你無法控制垃圾收集。 JavaScript解釋器爲你做到這一點。

我在一個項目中做了類似的事情(下載大量的圖片),並且遇到了內存問題。我發現的最佳解決方案是確保垃圾收集是可能的。原因是JavaScript解釋器執行你的代碼,如果你遍歷所有的圖像並下載它們,它可能不會在你完成下載之前做垃圾收集。這意味着所有的臨時圖像仍將保留在內存中。

要解決此問題,您需要使用或setTimeout功能的defer-方法。從某種意義上說,他們所做的就是他們告訴口譯員,在此之前運行其他材料是可以的。垃圾收集。

(使用underscore.js)此代碼示例應該給你的總體思路:

var images = [...many entries here...]; 

function downloadImage(index) { 
    //Make sure the index is valid 
    if(index < images.length) { 
    var httpClient = Ti.Network.createHttpClient({ 
     onload: function() { 
     //Save the image to the filesystem. 
     _defer.(downloadImage, ++index); //Download the next image. 
     } 
    }); 

    //Run the HttpClient here. 
    } 
} 

_.defer(downloadImage, 0); //Start the download sequence. 

也有一些標籤,你可以在tiapp.xml文件中設置,但在我的經驗,他們穿上」幫助很大。

  1. Part 1: The problem
  2. Part 2: The reason
  3. Part 3: The solution
2


「保持你的應用程序響應」 解釋我試圖讓相當不錯的點這三篇文章爲什麼不使用 android:largeHeap="true"

<android xmlns:android="http://schemas.android.com/apk/res/android"> 
<manifest> 
    <application android:largeHeap="true"/> 
</manifest> 

讀鈦官方文檔here

+0

這是我在回答中提到它時想到的標籤之一。正如我在那裏所說的那樣,在我的經歷中並沒有太大的好處。 – kaspermoerch

+0

我發現這個標籤對本地以及鈦都有幫助 –

相關問題