diff --git a/android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java b/android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java index 36ca0bb56d..083dc90d55 100644 --- a/android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java +++ b/android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java @@ -182,6 +182,8 @@ public class WXSDKInstance implements IWXActivityStateListener,View.OnLayoutChan private List mLayerOverFlowListeners; + private WXSDKInstance mParentInstance; + public List getLayerOverFlowListeners() { return mLayerOverFlowListeners; } @@ -1499,6 +1501,14 @@ public void run() { mWXPerformance.screenRenderTime = System.currentTimeMillis() - mRenderStartTime; } + public WXSDKInstance getParentInstance() { + return mParentInstance; + } + + public void setParentInstance(WXSDKInstance mParentInstance) { + this.mParentInstance = mParentInstance; + } + private void destroyView(View rootView) { try { if (rootView instanceof ViewGroup) { @@ -1522,6 +1532,9 @@ private void destroyView(View rootView) { public synchronized void destroy() { if(!isDestroy()) { + if(mParentInstance != null){ + mParentInstance = null; + } mApmForInstance.onEnd(); if(mRendered) { WXSDKManager.getInstance().destroyInstance(mInstanceId); diff --git a/android/sdk/src/main/java/com/taobao/weex/common/WXInstanceWrap.java b/android/sdk/src/main/java/com/taobao/weex/common/WXInstanceWrap.java index cbca430c87..46c6274fc4 100644 --- a/android/sdk/src/main/java/com/taobao/weex/common/WXInstanceWrap.java +++ b/android/sdk/src/main/java/com/taobao/weex/common/WXInstanceWrap.java @@ -18,6 +18,7 @@ */ package com.taobao.weex.common; +import com.taobao.weex.WXSDKInstance; import com.taobao.weex.annotation.JSMethod; /** @@ -28,7 +29,13 @@ public class WXInstanceWrap extends WXModule { @JSMethod public void error(String type, String code, String info) { if (mWXSDKInstance != null) { - mWXSDKInstance.onRenderError(type + "|" + code, info); + WXSDKInstance root = mWXSDKInstance; + if(info != null && info.contains("downgrade_to_root")){ + while (root.getParentInstance() != null){ + root = root.getParentInstance(); + } + } + root.onRenderError(type + "|" + code, info); } } } diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXEmbed.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXEmbed.java index 81b4025d9b..b95c8a0338 100644 --- a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXEmbed.java +++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXEmbed.java @@ -338,7 +338,7 @@ private static final int getLevel(WXEmbed embed){ private WXSDKInstance createInstance() { WXSDKInstance sdkInstance = getInstance().createNestedInstance(this); - + sdkInstance.setParentInstance(getInstance()); boolean needsAdd = !getAttrs().containsKey("disableInstanceVisibleListener"); if(needsAdd){ //prevent switch off fire viewappear event twice getInstance().addOnInstanceVisibleListener(this);