非靜態內部類建立靜態例項造成的記憶體洩漏

2021-08-09 07:23:50 字數 543 閱讀 3035

在實際的專案開發中,有時候我們需要頻繁的啟動某個頁面(activity),啟動的時候總是需要初始化一些資源,為了避免重複建立相同資源,常常會使用靜態物件去儲存這些值,這種情況下,也很容易照成記憶體洩漏。

請大家思考,為什麼會記憶體洩漏?

我們結合leakcanary給出的提示去分析,mresource->references->mainactivity

首先,非靜態內部類缺省會持有外部類的引用。

然後又使用了該非靜態內部類建立了乙個靜態的例項。

該靜態例項的生命週期和應用的一樣長,這就導致了該靜態例項一直會持有該activity的引用,導致activity的記憶體資源不能正常**。

@override 

protected void oncreate()

private void initdata()

}private class **static** testcoreres

}

註解:static為改動的地方

java之靜態內部類 非靜態類內部類的建立

package test public class testclass package test import test.testclass.inner 請注意這裡,一定一定要匯入內部類檔案,不然 1 會報錯 public class implements 結果 1package test publ...

靜態內部類和非靜態內部類區別

靜態內部類可以建立靜態的成員,而非靜態的內部類不可以,原因 內部類相當於外部類的乙個屬性,非靜態內部類中如果可以使用靜態成員,但是非靜態內部類是相當於非靜態成員,是在類例項化的時候才可以使用的,所以在非靜態類中定義靜態變數有一點多餘,所以不可以這樣使用。但是在非靜態內部類中可以定義static fi...

靜態內部類和非靜態內部類區別

靜態內部類可以建立靜態的成員,而非靜態的內部類不可以,原因 內部類相當於外部類的乙個屬性,非靜態內部類中如果可以使用靜態成員,但是非靜態內部類是相當於非靜態成員,是在類例項化的時候才可以使用的,所以在非靜態類中定義靜態變數有一點多餘,所以不可以這樣使用。但是在非靜態內部類中可以定義static fi...