我已經下載應用程序數據目錄中的100個圖像存儲其工作正常 但我已經下載更多的圖像,然後增加堆大小問題即將到來,應用程序已關閉。我已刪除所有對象,對象的值定義爲空和窗口也關閉但結果是一樣的。如何清除Android中鈦應用程序中的堆大小?
ERROR:生長堆(FRAG情況下),以14.687MB爲517197字節分配
像核Android的System.gc(); 那麼鈦的選擇是什麼
我已經下載應用程序數據目錄中的100個圖像存儲其工作正常 但我已經下載更多的圖像,然後增加堆大小問題即將到來,應用程序已關閉。我已刪除所有對象,對象的值定義爲空和窗口也關閉但結果是一樣的。如何清除Android中鈦應用程序中的堆大小?
ERROR:生長堆(FRAG情況下),以14.687MB爲517197字節分配
像核Android的System.gc(); 那麼鈦的選擇是什麼
據我所知,你無法控制垃圾收集。 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文件中設置,但在我的經驗,他們穿上」幫助很大。
:
「保持你的應用程序響應」 解釋我試圖讓相當不錯的點這三篇文章爲什麼不使用 android:largeHeap="true"
<android xmlns:android="http://schemas.android.com/apk/res/android">
<manifest>
<application android:largeHeap="true"/>
</manifest>
讀鈦官方文檔here
這是我在回答中提到它時想到的標籤之一。正如我在那裏所說的那樣,在我的經歷中並沒有太大的好處。 – kaspermoerch
我發現這個標籤對本地以及鈦都有幫助 –
你能提供的代碼? – 0101