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 <misa...@apache.org> Authored: Tue Aug 29 13:44:37 2017 +0800 Committer: misakuo <misa...@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); }