do not let same crash page reload again on short time
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/de67bd86 Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/de67bd86 Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/de67bd86 Branch: refs/heads/0.16-dev Commit: de67bd868673e52342a33605006a6a131d516edd Parents: 595ded4 Author: 御é <wentao....@alibaba-inc.com> Authored: Thu Sep 14 00:53:01 2017 +0800 Committer: yuhun-alibaba <tomcat...@gmail.com> Committed: Thu Sep 14 12:19:03 2017 +0800 ---------------------------------------------------------------------- .../java/com/taobao/weex/WXSDKInstance.java | 26 ++++++++++--------- .../com/taobao/weex/bridge/WXBridgeManager.java | 27 +++++++++++++++++--- .../com/taobao/weex/dom/action/Actions.java | 4 +-- .../weex/dom/action/ReloadPageAction.java | 6 +++-- 4 files changed, 43 insertions(+), 20 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/de67bd86/android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java ---------------------------------------------------------------------- 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 d1bbd52..f354a25 100644 --- a/android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java +++ b/android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java @@ -606,21 +606,23 @@ public class WXSDKInstance implements IWXActivityStateListener,DomContext, View. return ""; } - public void reloadPage() { + public void reloadPage(boolean reloadThis) { + WXSDKEngine.reload(); - // å¯ä»¥åé广æåï¼ - if (mContext != null) { - Intent intent = new Intent(); - intent.setAction(IWXDebugProxy.ACTION_INSTANCE_RELOAD); - intent.putExtra("url", mBundleUrl); - mContext.sendBroadcast(intent); + if (reloadThis) { + // å¯ä»¥åé广æåï¼ + if (mContext != null) { + Intent intent = new Intent(); + intent.setAction(IWXDebugProxy.ACTION_INSTANCE_RELOAD); + intent.putExtra("url", mBundleUrl); + mContext.sendBroadcast(intent); + } + // mRendered = false; + // destroy(); + // renderInternal(mPackage, mTemplate, mOptions, mJsonInitData, mFlag); + // refreshInstance("{}"); } - // mRendered = false; - // destroy(); - // renderInternal(mPackage, mTemplate, mOptions, mJsonInitData, mFlag); - // refreshInstance("{}"); - } /** * Refresh instance asynchronously. http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/de67bd86/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java ---------------------------------------------------------------------- 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 89b2d3b..3b11387 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 @@ -135,6 +135,9 @@ public class WXBridgeManager implements Callback,BactchExecutor { private static final int CRASHREINIT = 50; private static int reInitCount = 1; + private static String crashUrl = null; + private static long lastCrashTime = 0; + /** * next tick tasks, can set priority @@ -962,12 +965,15 @@ public class WXBridgeManager implements Callback,BactchExecutor { WXLogUtils.e("[WXBridgeManager] callReportCrashReloadPage exception: ", e); } try { + if (WXSDKManager.getInstance().getSDKInstance(instanceId) != null) { - // JSONObject domObject = JSON.parseObject(tasks); + boolean reloadThisInstance = shouReloadCurrentInstance( + WXSDKManager.getInstance().getSDKInstance(instanceId).getBundleUrl()); WXDomModule domModule = getDomModule(instanceId); - Action action = Actions.getReloadPage(instanceId); - domModule.postAction((DOMAction)action, true); + Action action = Actions.getReloadPage(instanceId, reloadThisInstance); + domModule.postAction((DOMAction) action, true); } + } catch (Exception e) { WXLogUtils.e("[WXBridgeManager] callReloadPage exception: ", e); commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_ERR_RELOAD_PAGE,"[WXBridgeManager] callReloadPage exception "+e.getCause()); @@ -975,6 +981,19 @@ public class WXBridgeManager implements Callback,BactchExecutor { return IWXBridge.INSTANCE_RENDERING_ERROR; } + public boolean shouReloadCurrentInstance(String aUrl) { + long time = System.currentTimeMillis(); + if (crashUrl == null || + (crashUrl != null && !crashUrl.equals(aUrl)) || + ((time - lastCrashTime) > 10000)) { + crashUrl = aUrl; + lastCrashTime = time; + return true; + } + lastCrashTime = time; + return false; + } + public void callReportCrash(String crashFile, final String instanceId, final String url) { // statistic weexjsc process crash Date date = new Date(); @@ -1809,7 +1828,7 @@ public class WXBridgeManager implements Callback,BactchExecutor { if (reInitCount > 1 && !instance.isNeedReLoad()) { // JSONObject domObject = JSON.parseObject(tasks); WXDomModule domModule = getDomModule(instanceId); - Action action = Actions.getReloadPage(instanceId); + Action action = Actions.getReloadPage(instanceId, true); domModule.postAction((DOMAction)action, true); instance.setNeedLoad(true); return; http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/de67bd86/android/sdk/src/main/java/com/taobao/weex/dom/action/Actions.java ---------------------------------------------------------------------- diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/action/Actions.java b/android/sdk/src/main/java/com/taobao/weex/dom/action/Actions.java index 6e87c68..779b4d6 100644 --- a/android/sdk/src/main/java/com/taobao/weex/dom/action/Actions.java +++ b/android/sdk/src/main/java/com/taobao/weex/dom/action/Actions.java @@ -225,7 +225,7 @@ public class Actions { return new ExecutableRenderAction(runnable); } - public static DOMAction getReloadPage(String instanceId) { - return new ReloadPageAction(instanceId); + public static DOMAction getReloadPage(String instanceId, boolean relaod) { + return new ReloadPageAction(instanceId, relaod); } } http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/de67bd86/android/sdk/src/main/java/com/taobao/weex/dom/action/ReloadPageAction.java ---------------------------------------------------------------------- diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/action/ReloadPageAction.java b/android/sdk/src/main/java/com/taobao/weex/dom/action/ReloadPageAction.java index aaf67e7..791a5f2 100644 --- a/android/sdk/src/main/java/com/taobao/weex/dom/action/ReloadPageAction.java +++ b/android/sdk/src/main/java/com/taobao/weex/dom/action/ReloadPageAction.java @@ -36,9 +36,11 @@ import com.taobao.weex.dom.RenderActionContext; final class ReloadPageAction implements DOMAction, RenderAction { private final String TAG = "ReloadPageAction"; private String mInstanceId; + private boolean mReloadThis; - ReloadPageAction(String instanceId) { + ReloadPageAction(String instanceId, boolean reloadThis) { mInstanceId = instanceId; + mReloadThis = reloadThis; } @Override @@ -51,7 +53,7 @@ final class ReloadPageAction implements DOMAction, RenderAction { WXSDKInstance instance = context.getInstance(); if (instance != null) { // instance.commitUTStab(IWXUserTrackAdapter.DOM_MODULE, WXErrorCode.WX_SUCCESS); - instance.reloadPage(); + instance.reloadPage(mReloadThis); } else { Log.e(TAG, "ReloadPageAction executeDom reloadPage instance is null"); }