所以我發現,與我保持每surfaceCreate
如何解決涉及線程的Android內存泄漏?
我想我需要這些線程,雖然創建多個Threads
的MAT
,但這種方法會導致的ViewThread
多個實例,爲用戶瀏覽我的應用程序,這是內存泄漏。
如何重新組織我的線程創建和處理的方式,以防止發生這種情況,或者如何阻止泄漏發生?
@Override
public void surfaceCreated(SurfaceHolder holder) {
loading=false;
if (!mThread.isAlive()){
mThread = new ViewThread(this);
mThread.setMenuRunning(true);
mThread.start();
}
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
if (mThread.isAlive()){
mThread.setMenuRunning(false);
}
}
我打開,從我的遊戲Career
活動導航走五次,這是對MAT
編輯顯示的內容:因爲我已經發現,根據surfaceDestroyed
爲破壞我的線程是不可靠的。我現在從不同的方法調用相應的線程銷燬調用,觸發。
我試過了,而那些多個實例我的班級依然堆積如山。 – Houseman
在這種情況下,您可以使用MAT來查找從GC根到對象的路徑。你可能會在監聽器/觀察者的某處找到另一個參考。這也可能是一個匿名的內部類。在這種情況下,嘗試使用靜態類,並在類的實例中使用弱引用。一旦gc運行,這將斷開鏈接。您也可以嘗試在適當的時候手動註銷監聽器。如果這不起作用,你可以分享MAT的屏幕截圖,以顯示GC根的路徑嗎? – nickmartens1980