You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@weex.apache.org by mi...@apache.org on 2017/08/29 05:47:59 UTC

incubator-weex git commit: * [android] fix the memory leak caused by BroadcastReceiver

Repository: incubator-weex
Updated Branches:
  refs/heads/0.16-dev 9684dcd75 -> 87c06c5f1


* [android] fix the memory leak caused by BroadcastReceiver


Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/87c06c5f
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/87c06c5f
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/87c06c5f

Branch: refs/heads/0.16-dev
Commit: 87c06c5f1fd208745c53f725ede50bd573618c89
Parents: 9684dcd
Author: misakuo <mi...@apache.org>
Authored: Tue Aug 29 13:44:37 2017 +0800
Committer: misakuo <mi...@apache.org>
Committed: Tue Aug 29 13:44:37 2017 +0800

----------------------------------------------------------------------
 .../com/taobao/weex/ui/component/WXText.java    | 25 +++++++++++++-------
 .../taobao/weex/ui/component/WXVContainer.java  |  6 +++++
 2 files changed, 23 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/87c06c5f/android/sdk/src/main/java/com/taobao/weex/ui/component/WXText.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXText.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXText.java
index 59e81fb..aad2bf4 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXText.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXText.java
@@ -27,6 +27,7 @@ import android.support.v4.content.LocalBroadcastManager;
 import android.text.Layout;
 import android.view.ViewGroup;
 
+import com.taobao.weex.WXEnvironment;
 import com.taobao.weex.WXSDKInstance;
 import com.taobao.weex.annotation.Component;
 import com.taobao.weex.common.Constants;
@@ -162,16 +163,23 @@ public class WXText extends WXComponent<WXTextView> {
   @Override
   public void destroy() {
     super.destroy();
-    if (getContext() != null && mTypefaceObserver != null) {
-      LocalBroadcastManager.getInstance(getContext()).unregisterReceiver(mTypefaceObserver);
+    if (WXEnvironment.getApplication() != null && mTypefaceObserver != null) {
+      WXLogUtils.d("WXText", "Unregister the typeface observer");
+      LocalBroadcastManager.getInstance(WXEnvironment.getApplication()).unregisterReceiver(mTypefaceObserver);
+      mTypefaceObserver = null;
     }
   }
 
   private void registerTypefaceObserver(String desiredFontFamily) {
-    if (getContext() == null) {
-      WXLogUtils.w("WXText", "Content is null on register typeface observer");
+    if (WXEnvironment.getApplication() == null) {
+      WXLogUtils.w("WXText", "ApplicationContent is null on register typeface observer");
+      return;
     }
     mFontFamily = desiredFontFamily;
+    if (mTypefaceObserver != null) {
+      return;
+    }
+
     mTypefaceObserver = new BroadcastReceiver() {
       @Override
       public void onReceive(Context context, Intent intent) {
@@ -181,20 +189,21 @@ public class WXText extends WXComponent<WXTextView> {
         }
 
         FontDO fontDO = TypefaceUtil.getFontDO(fontFamily);
-        if (fontDO != null && fontDO.getTypeface() != null) {
-          Layout layout = getHostView().getTextLayout();
+        if (fontDO != null && fontDO.getTypeface() != null && getHostView() != null) {
+          WXTextView hostView = getHostView();
+          Layout layout = hostView.getTextLayout();
           if (layout != null) {
             layout.getPaint().setTypeface(fontDO.getTypeface());
             WXLogUtils.d("WXText", "Apply font family " + fontFamily + " to paint");
           } else {
             WXLogUtils.w("WXText", "Layout not created");
           }
-          getHostView().invalidate();
+          hostView.invalidate();
         }
         WXLogUtils.d("WXText", "Font family " + fontFamily + " is available");
       }
     };
 
-    LocalBroadcastManager.getInstance(getContext()).registerReceiver(mTypefaceObserver, new IntentFilter(TypefaceUtil.ACTION_TYPE_FACE_AVAILABLE));
+    LocalBroadcastManager.getInstance(WXEnvironment.getApplication()).registerReceiver(mTypefaceObserver, new IntentFilter(TypefaceUtil.ACTION_TYPE_FACE_AVAILABLE));
   }
 }

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/87c06c5f/android/sdk/src/main/java/com/taobao/weex/ui/component/WXVContainer.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXVContainer.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXVContainer.java
index 871b18a..f769c2a 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXVContainer.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXVContainer.java
@@ -19,6 +19,7 @@
 package com.taobao.weex.ui.component;
 
 import android.content.Intent;
+import android.support.annotation.Nullable;
 import android.view.Menu;
 import android.view.View;
 import android.view.ViewGroup;
@@ -231,7 +232,12 @@ public abstract class WXVContainer<T extends ViewGroup> extends WXComponent<T> {
     return mChildren == null ? 0 : mChildren.size();
   }
 
+  @Nullable
   public WXComponent getChild(int index) {
+    if (mChildren == null || index < 0 || index >= mChildren.size()) {
+      //To avoid index out of bounds
+      return null;
+    }
     return mChildren.get(index);
   }