1僧须、解決了webview的內(nèi)存泄露
ViewParent parent = contetentWebView.getParent();
if (parent != null) {
((ViewGroup) parent).removeView(webView);
}
webView.stopLoading();
// 退出時調(diào)用此方法,移除綁定的服務(wù),否則某些特定系統(tǒng)會報錯
webView.removeJavascriptInterface("xxx");
webView.getSettings().setJavaScriptEnabled(false);
webView.destroyDrawingCache();
webView.clearHistory();
webView.removeAllViews();
try {
contetentWebView.destroy();
} catch (Throwable ex) {
}
2扣甲、解決了ConnectivityManager的內(nèi)存泄露,類似的泄露還有WifiManager
public static boolean isNetworkAvailable(Context ctx) {
try {
//user activity to get ConnectivityManager will cause memory leak,so here use ApplicationContext instead
if (ctx instanceof Activity) {
ctx = ctx.getApplicationContext();
}
ConnectivityManager cm = (ConnectivityManager) ctx.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo info = cm.getActiveNetworkInfo();
return (info != null && info.isAvailable());
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
3、內(nèi)存靜態(tài)類單例 導致的內(nèi)存泄露琉挖,暫未解決
/**
* JVM內(nèi)部的機制能夠保證當一個類被加載的時候启泣,這個類的加載過程是線程互斥的。
* 這樣當我們第一次調(diào)用getInstance的時候示辈,JVM能夠幫我們保證instance只被創(chuàng)建一次寥茫,并且會保證把賦值給instance的內(nèi)存初始化完畢。
* 測試發(fā)現(xiàn)矾麻,single被裝載到j(luò)vm后纱耻,無法被GC回收,此處會造成內(nèi)存泄露险耀,因為游戲在運行的任何時候都可能調(diào)當前類的實例弄喘,
* 目前還沒想到好的辦法釋放這個內(nèi)存
*/
public static A getInstance() {
return AAPIHolder.single;
}
private static class AAPIHolder{
private static final A single = new A ();
}