在實際的專案開發中,有時候我們需要頻繁的啟動某個頁面(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...