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);
}