From 9a3a5fa5ee5d90209774daf22796eee81a963557 Mon Sep 17 00:00:00 2001 From: darin Date: Wed, 15 May 2019 16:58:29 +0800 Subject: [PATCH] Degrade to h5 if can not reload this page (#2438) --- .../java/com/taobao/weex/WXSDKInstance.java | 13 ++++++++++ .../taobao/weex/bridge/WXBridgeManager.java | 25 ++++++++++++++++--- 2 files changed, 34 insertions(+), 4 deletions(-) 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 04a0bdb90f..109a327cb9 100644 --- a/android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java +++ b/android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java @@ -18,6 +18,7 @@ */ package com.taobao.weex; +import static com.taobao.weex.common.WXErrorCode.WX_ERR_JSC_CRASH; import static com.taobao.weex.common.WXErrorCode.WX_ERR_RELOAD_PAGE; import static com.taobao.weex.http.WXHttpUtil.KEY_USER_AGENT; @@ -912,6 +913,18 @@ public void reloadPage(boolean reloadThis) { // destroy(); // renderInternal(mPackage, mTemplate, mOptions, mJsonInitData, mFlag); // refreshInstance("{}"); + } else { + IWXConfigAdapter adapter = WXSDKManager.getInstance().getWxConfigAdapter(); + if (adapter != null) { + boolean degrade = Boolean.parseBoolean(adapter + .getConfig("android_weex_ext_config", + "degrade_to_h5_if_not_reload", + "true")); + WXLogUtils.e("degrade : " + degrade); + if(degrade) { + onJSException(String.valueOf(WX_ERR_JSC_CRASH.getErrorCode()),"jsc Crashed", "jsc Crashed degradeToH5"); + } + } } } diff --git a/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java b/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java index 0abf365b50..70b1ed4538 100644 --- a/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java +++ b/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java @@ -43,6 +43,7 @@ import com.taobao.weex.WXSDKEngine; import com.taobao.weex.WXSDKInstance; import com.taobao.weex.WXSDKManager; +import com.taobao.weex.adapter.IWXConfigAdapter; import com.taobao.weex.adapter.IWXJSExceptionAdapter; import com.taobao.weex.adapter.IWXJsFileLoaderAdapter; import com.taobao.weex.adapter.IWXJscProcessManager; @@ -872,7 +873,7 @@ public int callReportCrashReloadPage(String instanceId, String crashFile) { try { if (WXSDKManager.getInstance().getSDKInstance(instanceId) != null) { - boolean reloadThisInstance = shouReloadCurrentInstance( + boolean reloadThisInstance = shouldReloadCurrentInstance( WXSDKManager.getInstance().getSDKInstance(instanceId).getBundleUrl()); new ActionReloadPage(instanceId, reloadThisInstance).executeAction(); } @@ -886,12 +887,28 @@ public int callReportCrashReloadPage(String instanceId, String crashFile) { return IWXBridge.INSTANCE_RENDERING_ERROR; } - public boolean shouReloadCurrentInstance(String aUrl) { + public boolean shouldReloadCurrentInstance(String aUrl) { long time = System.currentTimeMillis(); + String bizUrl = aUrl; + IWXConfigAdapter adapter = WXSDKManager.getInstance().getWxConfigAdapter(); + if (adapter != null) { + boolean check_biz_url = Boolean.parseBoolean(adapter + .getConfig("android_weex_ext_config", + "check_biz_url", + "true")); + WXLogUtils.e("check_biz_url : " + check_biz_url); + if(check_biz_url && !TextUtils.isEmpty(aUrl)) { + Uri uri = Uri.parse(aUrl); + if(uri != null) { + bizUrl = uri.buildUpon().clearQuery().build().toString(); + } + } + } + if (crashUrl == null || - (crashUrl != null && !crashUrl.equals(aUrl)) || + (crashUrl != null && !crashUrl.equals(bizUrl)) || ((time - lastCrashTime) > 15000)) { - crashUrl = aUrl; + crashUrl = bizUrl; lastCrashTime = time; return true; }