解決幾個常見內(nèi)存泄露

1、解決了webview的內(nèi)存泄露

 ViewParent parent = contetentWebView.getParent();
            if (parent != null) {
                ((ViewGroup) parent).removeView(webView);
            }
            webView.stopLoading();
            // 退出時調(diào)用此方法,移除綁定的服務,否則某些特定系統(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被裝載到jvm后,無法被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 ();
  }  
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容