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

Reply via email to