Android 防止記憶體洩漏的幾個注意點
阿新 • • 發佈:2019-01-22
1)getSystemService的時候,應避免使用activity的context,而是使用application的context
2)單例模式的context,應使用context.getApplicationContext來代替,如下:
public class AppSettings {
private Context mAppContext;
private static AppSettings sInstance = new AppSettings();
//some other codes
public static AppSettings getInstance() {
return sInstance;
}
public final void setup(Context context) {
mAppContext = context.getApplicationContext(); //這裡應使用context.getApplicationContext()方法而不是直接賦值context
}
}
3)忘記反註冊監聽器。我們經常會在應用中註冊一些listener、observer等,這些都是作為觀察者模式來實現的,那麼在activity的oncreate方法中註冊了監聽器,就應該在ondestory方法中反註冊監聽器(解註冊)
4)非靜態內部類、匿名內部類會隱式持有外部類的例項引用,導致洩漏。解決方法為:
1》使用例項變數儲存匿名內部類的例項,在ondestory中反註冊
2》如果registerListener方法可以修改,可以使用弱引用來解決
5)資源未關閉導致的記憶體洩漏等……