2010-08-02 124 views
0

我目前正在開發一個程序,使用可滾動/可縮放圖像作爲主要用戶界面。它使用由矩陣操縱的畫布遍歷大面積。我不想將一個超大的位圖加載到內存中,而是想使用一個tile系統來加載256乘256個方塊。我的問題是,當圖像加載到內存時,應用程序會滯後。我使用一個簡單的outer和inner for循環來加載tile,如果它們爲null,並且如果用戶縮小到一定程度,則tile將全部消失,並顯示整個圖像的較低res版本。我被引導到異步圖像加載的方向,這似乎可以防止圖像加載到內存時的滯後,但我不知道如何開始這個,並想知道如果任何人有任何建議如何一般異步加載位圖進入畫布。謝謝!異步圖像加載和Android畫布

回答

1

我只是使用第二個線程來做任何事情,可能需要一些時間來確保UI總是很好和響應。如果UI包含動畫(如滾動)以擺脫口吃,您甚至可能想要降低該線程的優先級。

您可以使用第二個Thread對象,該對象在完成時通過Handler發送消息,或者您可以使用AsyncTask。

+0

我會考慮這兩個,謝謝。一旦我有異步任務將我的位圖加載到內存中並在完成後將它們加載到我的UI中,那麼回收位圖以避免內存不足錯誤的最有效方法是什麼?另一個檢查位圖不再被查看的異步任務? – jfisk 2010-08-02 15:55:56

+1

Bitmap.recycle()加速殺死它們。除此之外,最重要的事情是確保你不再提及它們。要對靜態成員非常小心,並且一定要從任何數組/列表中刪除它們 - 包括指向指向這些位圖的可繪製視圖的數組:)。 – EboMike 2010-08-02 16:30:49

+0

awsome,非常感謝。要使用bitmap.recycle(),檢測位圖是否不再被查看的最佳方法是使用一個數組來記錄正在繪製的位圖,然後有一個for循環遍歷每個位圖以查看是否不等於那些價值?它的現在我有,似乎應該有一個更簡單的方法來確定在屏幕上繪製的位圖。 – jfisk 2010-08-02 18:24:01