我有一個應用程序,我在生成許多位圖對象。一旦我創建了一個位圖,所有剩下的位圖將會是相同的大小。最快的方法來加載位圖,重新使用位圖一旦創建
目前我可以在我的手機上大約50-80毫秒內加載/創建一個新的位圖,該工具適用於我所需要的。然而,由於創建這些的速度很快,我打了不斷的GC。
我想重新使用相同的位圖對象,但不知道如何通過sdk執行此操作。
我編譯libjpeg並通過NDK加載我的圖像並重新使用我的位圖,但是我的加載速度下降到大約200毫秒,這太慢了。 我將在稍後發佈代碼,當我把它放在我面前時。
問題:
有沒有辦法重新使用我的位圖對象,以避免GC? 有更快的方式通過NDK加載我的圖像嗎?是否有可能掛鉤操作系統加載位圖的方式?我知道libjpegTurbo,但目前我無法編譯它(另一天的另一個主題)。
任何其他想法的最佳方式來做到這一點。
我每秒創建約20個位圖,所以我無法將它們全部留在內存中。我實際上有一個後臺線程填充一個隊列,我從中拉取新的位圖。最大的問題是在我的後臺線程中,而不是創建新的位圖對象,我想從一個位圖池中取出並重新使用它們,因此我不必擁有太多的GC。 – broschb 2012-03-12 15:19:33
@broschb如果你不能將它們留在記憶中,那麼你如何重新使用它們?你意識到這沒有道理嗎?如果你有內存限制,那麼最好的辦法就是使用散列表和隊列來實現一個圖像緩存,然後一旦你加載的位圖數量達到一定限制,從隊列中刪除舊的位圖並提示GC他們應該被清理出內存。散列表將用於識別位圖當前是否在隊列中及其位置。 – onit 2012-03-12 15:23:33
我可以通過更改位圖的像素數據以及來自其他位圖的新像素數據來重新使用位圖。看@Samuels的迴應,我認爲這是我正在思考的軌道。 – broschb 2012-03-12 17:33:15