我有一個Android應用程序,我使用HashMap,其中我保持我的線程(值)每個執行任務(Runnable)。爲了確定線程我使用字符串作爲鍵。只要他們執行通常不太長的任務,線程就會一直存在。問題是它們在完成並從HashMap中刪除後似乎從未被GC釋放過(並且它們不在其他地方引用)。如果我創建了我的應用程序的轉儲,那麼在應用程序的整個生命週期中,我的內存中的任務數量就與我一樣多。試圖使用HashSet來代替,但結果相同。內存泄漏與Android上的HashMap/HashSet
在代碼中,我開始跟他們這幾行:
Thread image_fetch_thread = new Thread(new ImageFetchTask(image_url, this));
this.running_image_fetch_threads.put(image_url, image_fetch_thread);
image_fetch_thread.start();
,並在某一時刻後,他們成爲去除:
this.running_image_fetch_threads.remove(image_url);
爲什麼GC不喜歡收集的?
我只是做了android系統中的幾件事情,但你真的確定你應該保持地圖的線程?在桌面Java中,我會說這是一個明確的代碼惡意。 – bwawok 2010-08-17 19:00:23