You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@weex.apache.org by ky...@apache.org on 2018/04/28 06:54:06 UTC

[38/48] incubator-weex git commit: * [android] Merge WeexCore-master to master.

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2f8caedb/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 bb90f23..1a288ee 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
@@ -27,8 +27,11 @@ import android.os.Looper;
 import android.os.Message;
 import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
+import android.support.annotation.UiThread;
 import android.support.v4.util.ArrayMap;
+import android.support.v4.util.LruCache;
 import android.text.TextUtils;
+import android.util.Log;
 import android.view.View;
 import android.view.ViewGroup;
 
@@ -47,18 +50,29 @@ import com.taobao.weex.common.WXErrorCode;
 import com.taobao.weex.common.WXException;
 import com.taobao.weex.common.WXJSBridgeMsgType;
 import com.taobao.weex.common.WXJSExceptionInfo;
-import com.taobao.weex.common.WXPerformance;
 import com.taobao.weex.common.WXRefreshData;
 import com.taobao.weex.common.WXRuntimeException;
 import com.taobao.weex.common.WXThread;
-import com.taobao.weex.dom.DOMAction;
-import com.taobao.weex.dom.WXDomModule;
-import com.taobao.weex.dom.action.Action;
-import com.taobao.weex.dom.action.Actions;
-import com.taobao.weex.dom.action.TraceableAction;
-import com.taobao.weex.tracing.WXTracing;
+import com.taobao.weex.dom.CSSShorthand;
+import com.taobao.weex.layout.ContentBoxMeasurement;
 import com.taobao.weex.ui.WXComponentRegistry;
 import com.taobao.weex.ui.component.WXComponent;
+import com.taobao.weex.ui.action.ActionReloadPage;
+import com.taobao.weex.ui.action.BasicGraphicAction;
+import com.taobao.weex.ui.action.GraphicActionAddElement;
+import com.taobao.weex.ui.action.GraphicActionAddEvent;
+import com.taobao.weex.ui.action.GraphicActionCreateBody;
+import com.taobao.weex.ui.action.GraphicActionCreateFinish;
+import com.taobao.weex.ui.action.GraphicActionLayout;
+import com.taobao.weex.ui.action.GraphicActionMoveElement;
+import com.taobao.weex.ui.action.GraphicActionRefreshFinish;
+import com.taobao.weex.ui.action.GraphicActionRemoveElement;
+import com.taobao.weex.ui.action.GraphicActionRemoveEvent;
+import com.taobao.weex.ui.action.GraphicActionUpdateAttr;
+import com.taobao.weex.ui.action.GraphicActionUpdateStyle;
+import com.taobao.weex.ui.action.GraphicPosition;
+import com.taobao.weex.ui.action.GraphicSize;
+import com.taobao.weex.ui.module.WXDomModule;
 import com.taobao.weex.utils.WXExceptionUtils;
 import com.taobao.weex.utils.WXFileUtils;
 import com.taobao.weex.utils.WXJsonUtils;
@@ -67,8 +81,6 @@ import com.taobao.weex.utils.WXUtils;
 import com.taobao.weex.utils.WXViewUtils;
 import com.taobao.weex.utils.batch.BactchExecutor;
 import com.taobao.weex.utils.batch.Interceptor;
-import com.taobao.weex.wson.Wson;
-
 import java.io.BufferedReader;
 import java.io.File;
 import java.io.FileInputStream;
@@ -80,6 +92,7 @@ import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
@@ -87,11 +100,9 @@ import java.util.Set;
 import java.util.Stack;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
-import java.util.regex.Matcher;
 import java.util.regex.Pattern;
-import static com.taobao.weex.bridge.WXModuleManager.getDomModule;
-import static com.taobao.weex.bridge.WXModuleManager.createDomModule;
 
+import static com.taobao.weex.bridge.WXModuleManager.createDomModule;
 
 /**
  * Manager class for communication between JavaScript and Android.
@@ -118,7 +129,6 @@ import static com.taobao.weex.bridge.WXModuleManager.createDomModule;
 public class WXBridgeManager implements Callback, BactchExecutor {
 
   public static final String METHOD_CREATE_INSTANCE = "createInstance";
-  public static final String METHOD_CREATE_INSTANCE_CONTEXT = "createInstanceContext";
   public static final String METHOD_DESTROY_INSTANCE = "destroyInstance";
   public static final String METHOD_CALL_JS = "callJS";
   public static final String METHOD_SET_TIMEOUT = "setTimeoutCallback";
@@ -131,7 +141,7 @@ public class WXBridgeManager implements Callback, BactchExecutor {
   public static final String METHOD_REFRESH_INSTANCE = "refreshInstance";
   public static final String METHOD_NOTIFY_TRIM_MEMORY = "notifyTrimMemory";
   public static final String METHOD_NOTIFY_SERIALIZE_CODE_CACHE =
-      "notifySerializeCodeCache";
+          "notifySerializeCodeCache";
 
   public static final String KEY_METHOD = "method";
   public static final String KEY_ARGS = "args";
@@ -147,7 +157,6 @@ public class WXBridgeManager implements Callback, BactchExecutor {
   public static final String INITLOGFILE = "/jsserver_start.log";
   private static final String NON_CALLBACK = "-1";
   private static final String UNDEFINED = "undefined";
-
   private static final String BUNDLE_TYPE = "bundleType";
   private static final int INIT_FRAMEWORK_OK = 1;
   private static final int CRASHREINIT = 50;
@@ -156,6 +165,7 @@ public class WXBridgeManager implements Callback, BactchExecutor {
   private volatile static int reInitCount = 1;
   private static String crashUrl = null;
   private static long lastCrashTime = 0;
+
   private static String mRaxApi = null;
 
   // add for clound setting, default value is true
@@ -169,16 +179,18 @@ public class WXBridgeManager implements Callback, BactchExecutor {
     Others
   };
 
+  private static final boolean BRIDGE_LOG_SWITCH = false;
+
   /**
    * Whether JS Framework(main.js) has been initialized.
    */
   private volatile static boolean mInit = false;
 
-
-
   private static String globalConfig = "none";
   private static String GLOBAL_CONFIG_KEY = "global_switch_config";
 
+  private static Map<String, String> mWeexCoreEnvOptions = new HashMap<>();
+
   /**
    * package
    **/
@@ -264,11 +276,14 @@ public class WXBridgeManager implements Callback, BactchExecutor {
   // setJSFrameworkInit and isJSFrameworkInit may use on diff thread
   // use volatile
   private boolean isJSFrameworkInit() {
-      return mInit;
+    return mInit;
   }
 
   private void setJSFrameworkInit(boolean init) {
-      mInit = init;
+    mInit = init;
+    if (init == true) {
+      onJsFrameWorkInitSuccees();
+    }
   }
 
   private void initWXBridge(boolean remoteDebug) {
@@ -287,9 +302,9 @@ public class WXBridgeManager implements Callback, BactchExecutor {
             Constructor constructor = clazz.getConstructor(Context.class, WXBridgeManager.class);
             if (constructor != null) {
               mWxDebugProxy = (IWXDebugProxy) constructor.newInstance(
-                  WXEnvironment.getApplication(), WXBridgeManager.this);
+                      WXEnvironment.getApplication(), WXBridgeManager.this);
               if (mWxDebugProxy != null) {
-                mWxDebugProxy.start();
+                mWxDebugProxy.start(new WXJsFunctions());
               }
             }
           }
@@ -321,21 +336,21 @@ public class WXBridgeManager implements Callback, BactchExecutor {
 
   public Object callModuleMethod(String instanceId, String moduleStr, String methodStr, JSONArray args, JSONObject options) {
     WXSDKInstance wxsdkInstance = WXSDKManager.getInstance()
-        .getSDKInstance(instanceId);
+            .getSDKInstance(instanceId);
     if (wxsdkInstance == null) {
       return null;
     }
     if (wxsdkInstance.isNeedValidate()
-        && WXSDKManager.getInstance().getValidateProcessor() != null) {
+            && WXSDKManager.getInstance().getValidateProcessor() != null) {
       WXValidateProcessor.WXModuleValidateResult validateResult = WXSDKManager
-          .getInstance().getValidateProcessor()
-          .onModuleValidate(wxsdkInstance, moduleStr, methodStr, args, options);
+              .getInstance().getValidateProcessor()
+              .onModuleValidate(wxsdkInstance, moduleStr, methodStr, args, options);
       if (validateResult == null) {
         return null;
       }
       if (validateResult.isSuccess) {
         return WXModuleManager.callModuleMethod(instanceId, moduleStr, methodStr,
-            args);
+                args);
       } else {
         JSONObject validateInfo = validateResult.validateInfo;
         if (validateInfo != null) {
@@ -412,7 +427,7 @@ public class WXBridgeManager implements Callback, BactchExecutor {
 
   public void sendMessageDelayed(Message message, long delayMillis) {
     if (message == null || mJSHandler == null || mJSThread == null
-        || !mJSThread.isWXThreadAlive() || mJSThread.getLooper() == null) {
+            || !mJSThread.isWXThreadAlive() || mJSThread.getLooper() == null) {
       return;
     }
     mJSHandler.sendMessageDelayed(message, delayMillis);
@@ -420,7 +435,7 @@ public class WXBridgeManager implements Callback, BactchExecutor {
 
   public void removeMessage(int what, Object obj) {
     if (mJSHandler == null || mJSThread == null
-        || !mJSThread.isWXThreadAlive() || mJSThread.getLooper() == null) {
+            || !mJSThread.isWXThreadAlive() || mJSThread.getLooper() == null) {
       return;
     }
     mJSHandler.removeMessages(what, obj);
@@ -428,27 +443,27 @@ public class WXBridgeManager implements Callback, BactchExecutor {
 
   public Object callNativeModule(String instanceId, String module, String method, JSONArray arguments, Object options) {
 
-    if (WXEnvironment.isOpenDebugLog()) {
+    if (WXEnvironment.isApkDebugable() && BRIDGE_LOG_SWITCH) {
       mLodBuilder.append("[WXBridgeManager] callNativeModule >>>> instanceId:").append(instanceId)
-          .append(", module:").append(module).append(", method:").append(method).append(", arguments:").append(arguments);
+              .append(", module:").append(module).append(", method:").append(method).append(", arguments:").append(arguments);
       WXLogUtils.d(mLodBuilder.substring(0));
       mLodBuilder.setLength(0);
     }
 
     try {
       if (WXDomModule.WXDOM.equals(module)) {
-        WXDomModule dom = getDomModule(instanceId);
+        WXDomModule dom = WXModuleManager.getDomModule(instanceId);
         return dom.callDomMethod(method, arguments);
       } else {
         return callModuleMethod(instanceId, module,
-            method, arguments);
+              method, arguments);
       }
     } catch (Exception e) {
-	  String err = "[WXBridgeManager] callNative exception: " + WXLogUtils.getStackTrace(e);
+      String err = "[WXBridgeManager] callNative exception: " + WXLogUtils.getStackTrace(e);
       WXLogUtils.e(err);
-	  WXExceptionUtils.commitCriticalExceptionRT(instanceId,
-			  WXErrorCode.WX_KEY_EXCEPTION_INVOKE, "callNativeModule",
-			  err, null);
+      WXExceptionUtils.commitCriticalExceptionRT(instanceId,
+              WXErrorCode.WX_KEY_EXCEPTION_INVOKE, "callNativeModule",
+              err, null);
     }
 
     return null;
@@ -456,53 +471,51 @@ public class WXBridgeManager implements Callback, BactchExecutor {
 
   public Object callNativeModule(String instanceId, String module, String method, JSONArray arguments, JSONObject options) {
 
-    if (WXEnvironment.isOpenDebugLog()) {
+    if (WXEnvironment.isApkDebugable() && BRIDGE_LOG_SWITCH) {
       mLodBuilder.append("[WXBridgeManager] callNativeModule >>>> instanceId:").append(instanceId)
-          .append(", module:").append(module).append(", method:").append(method).append(", arguments:").append(arguments);
+              .append(", module:").append(module).append(", method:").append(method).append(", arguments:").append(arguments);
       WXLogUtils.d(mLodBuilder.substring(0));
       mLodBuilder.setLength(0);
     }
 
     try {
       if (WXDomModule.WXDOM.equals(module)) {
-        WXDomModule dom = getDomModule(instanceId);
-		if(dom != null){
-		  return dom.callDomMethod(method, arguments);
-		} else {
-		  createDomModule(WXSDKManager.getInstance().getSDKInstance(instanceId));
-		}
+        WXDomModule dom = WXModuleManager.getDomModule(instanceId);
+        if(dom != null){
+          return dom.callDomMethod(method, arguments);
+        } else {
+          createDomModule(WXSDKManager.getInstance().getSDKInstance(instanceId));
+        }
       } else {
         return callModuleMethod(instanceId, module,
-            method, arguments, options);
+              method, arguments, options);
       }
     } catch (Exception e) {
-	  String err = "[WXBridgeManager] callNative exception: " + WXLogUtils.getStackTrace(e);
-	  WXLogUtils.e(err);
-	  WXExceptionUtils.commitCriticalExceptionRT(instanceId,
-			  WXErrorCode.WX_KEY_EXCEPTION_INVOKE, "callNativeModule",
-			  err, null);
+      String err = "[WXBridgeManager] callNative exception: " + WXLogUtils.getStackTrace(e);
+      WXLogUtils.e(err);
+      WXExceptionUtils.commitCriticalExceptionRT(instanceId,
+              WXErrorCode.WX_KEY_EXCEPTION_INVOKE, "callNativeModule",
+              err, null);
     }
 
     return null;
   }
 
   public Object callNativeComponent(String instanceId, String componentRef, String method, JSONArray arguments, Object options) {
-    if (WXEnvironment.isOpenDebugLog()) {
+    if (WXEnvironment.isApkDebugable() && BRIDGE_LOG_SWITCH) {
       mLodBuilder.append("[WXBridgeManager] callNativeComponent >>>> instanceId:").append(instanceId)
-          .append(", componentRef:").append(componentRef).append(", method:").append(method).append(", arguments:").append(arguments);
+              .append(", componentRef:").append(componentRef).append(", method:").append(method).append(", arguments:").append(arguments);
       WXLogUtils.d(mLodBuilder.substring(0));
       mLodBuilder.setLength(0);
     }
     try {
-
-      WXDomModule dom = getDomModule(instanceId);
+      WXDomModule dom = WXModuleManager.getDomModule(instanceId);
       dom.invokeMethod(componentRef, method, arguments);
-
     } catch (Exception e) {
       WXLogUtils.e("[WXBridgeManager] callNative exception: ", e);
-	  WXExceptionUtils.commitCriticalExceptionRT(instanceId,
-			  WXErrorCode.WX_KEY_EXCEPTION_INVOKE, "callNativeComponent",
-			  WXLogUtils.getStackTrace(e), null);
+      WXExceptionUtils.commitCriticalExceptionRT(instanceId,
+              WXErrorCode.WX_KEY_EXCEPTION_INVOKE, "callNativeComponent",
+              WXLogUtils.getStackTrace(e), null);
     }
     return null;
   }
@@ -514,22 +527,22 @@ public class WXBridgeManager implements Callback, BactchExecutor {
    * @param tasks      tasks to be executed
    * @param callback   next tick id
    */
-  public int callNative(String instanceId, JSONArray tasks, String callback) {
-    if (tasks == null || tasks.isEmpty()) {
-	  String err = "[WXBridgeManager] callNative: call Native tasks is null";
+  public int callNative(String instanceId, String tasks, String callback) {
+    if (TextUtils.isEmpty(tasks)) {
+      String err = "[WXBridgeManager] callNative: call Native tasks is null";
       WXLogUtils.e(err);
-	  WXExceptionUtils.commitCriticalExceptionRT(instanceId,
-			  WXErrorCode.WX_KEY_EXCEPTION_INVOKE, "callNative",
-			  err + "| INSTANCE_RENDERING_ERROR will be set", null);
+      WXExceptionUtils.commitCriticalExceptionRT(instanceId,
+              WXErrorCode.WX_KEY_EXCEPTION_INVOKE, "callNative",
+              err + "| INSTANCE_RENDERING_ERROR will be set", null);
 
       return IWXBridge.INSTANCE_RENDERING_ERROR;
     }
 
-    if (WXEnvironment.isOpenDebugLog()) {
-    mLodBuilder.append("[WXBridgeManager] callNative >>>> instanceId:").append(instanceId)
-        .append(", tasks:").append(tasks).append(", callback:").append(callback);
-    WXLogUtils.d(mLodBuilder.substring(0));
-    mLodBuilder.setLength(0);
+    if (WXEnvironment.isApkDebugable() && BRIDGE_LOG_SWITCH) {
+      mLodBuilder.append("[WXBridgeManager] callNative >>>> instanceId:").append(instanceId)
+              .append(", tasks:").append(tasks).append(", callback:").append(callback);
+      WXLogUtils.d(mLodBuilder.substring(0));
+      mLodBuilder.setLength(0);
     }
 
     if (mDestroyedInstanceId != null && mDestroyedInstanceId.contains(instanceId)) {
@@ -539,33 +552,32 @@ public class WXBridgeManager implements Callback, BactchExecutor {
 
     long start = System.currentTimeMillis();
     long parseNanos = System.nanoTime();
-    JSONArray array = tasks;
+    JSONArray array = JSON.parseArray(tasks);
     parseNanos = System.nanoTime() - parseNanos;
 
     if (WXSDKManager.getInstance().getSDKInstance(instanceId) != null) {
       WXSDKManager.getInstance().getSDKInstance(instanceId).jsonParseTime(System.currentTimeMillis() - start);
     }
 
-    int size = array.size();
-    if (size > 0) {
+    if (null != array && array.size() > 0) {
+      int size = array.size();
       try {
         JSONObject task;
         for (int i = 0; i < size; ++i) {
           task = (JSONObject) array.get(i);
           if (task != null && WXSDKManager.getInstance().getSDKInstance(instanceId) != null) {
-            Object target = task.get(MODULE);
-            if (target != null) {
-              if (WXDomModule.WXDOM.equals(target)) {
-                WXDomModule dom = getDomModule(instanceId);
+            Object module = task.get(MODULE);
+            if (module != null) {
+              if (WXDomModule.WXDOM.equals(module)) {
+                WXDomModule dom = WXModuleManager.getDomModule(instanceId);
                 dom.callDomMethod(task, parseNanos);
               } else {
                 JSONObject optionObj = task.getJSONObject(OPTIONS);
-                callModuleMethod(instanceId, (String) target,
-                    (String) task.get(METHOD), (JSONArray) task.get(ARGS), optionObj);
+                callModuleMethod(instanceId, (String) module,
+                        (String) task.get(METHOD), (JSONArray) task.get(ARGS), optionObj);
               }
             } else if (task.get(COMPONENT) != null) {
-              //call component
-              WXDomModule dom = getDomModule(instanceId);
+              WXDomModule dom = WXModuleManager.getDomModule(instanceId);
               dom.invokeMethod((String) task.get(REF), (String) task.get(METHOD), (JSONArray) task.get(ARGS));
             } else {
               throw new IllegalArgumentException("unknown callNative");
@@ -574,67 +586,10 @@ public class WXBridgeManager implements Callback, BactchExecutor {
         }
       } catch (Exception e) {
         WXLogUtils.e("[WXBridgeManager] callNative exception: ", e);
-		WXExceptionUtils.commitCriticalExceptionRT(instanceId,
-				WXErrorCode.WX_KEY_EXCEPTION_INVOKE, "callNative",
-				WXLogUtils.getStackTrace(e) , null);
-      }
-    }
-
-    if (UNDEFINED.equals(callback) || NON_CALLBACK.equals(callback)) {
-      return IWXBridge.INSTANCE_RENDERING_ERROR;
-    }
-    // get next tick
-    getNextTick(instanceId, callback);
-    return IWXBridge.INSTANCE_RENDERING;
-  }
-
-  // callCreateBody
-  public int callCreateBody(String instanceId, String tasks, String callback) {
-    if (TextUtils.isEmpty(tasks)) {
-      // if (WXEnvironment.isApkDebugable()) {
-      WXLogUtils.d("[WXBridgeManager] callCreateBody: call CreateBody tasks is null");
-      // }
-	  WXExceptionUtils.commitCriticalExceptionRT(instanceId,
-			  WXErrorCode.WX_KEY_EXCEPTION_INVOKE, "callCreateBody",
-			  "tasks is empty, INSTANCE_RENDERING_ERROR will be set", null);
-
-	  return IWXBridge.INSTANCE_RENDERING_ERROR;
-    }
-
-    if (WXEnvironment.isOpenDebugLog()) {
-    mLodBuilder.append("[WXBridgeManager] callCreateBody >>>> instanceId:").append(instanceId)
-        .append(", tasks:").append(tasks).append(", callback:").append(callback);
-    WXLogUtils.d(mLodBuilder.substring(0));
-    mLodBuilder.setLength(0);
-    }
-
-
-    if (mDestroyedInstanceId != null && mDestroyedInstanceId.contains(instanceId)) {
-      return IWXBridge.DESTROY_INSTANCE;
-    }
-
-    try {
-      if (WXSDKManager.getInstance().getSDKInstance(instanceId) != null) {
-        long start = System.currentTimeMillis();
-        long nanosTemp = System.nanoTime();
-        JSONObject domObject = JSON.parseObject(tasks);
-        nanosTemp = System.nanoTime() - nanosTemp;
-
-        WXDomModule domModule = getDomModule(instanceId);
-        Action action = Actions.getCreateBody(domObject);
-        domModule.postAction((DOMAction) action, true);
-
-        if (WXTracing.isAvailable() && action instanceof TraceableAction) {
-          ((TraceableAction) action).mParseJsonNanos = nanosTemp;
-          ((TraceableAction) action).mStartMillis = start;
-          ((TraceableAction) action).onStartDomExecute(instanceId, "createBody", "_root", domObject.getString("type"), tasks);
-        }
+        WXExceptionUtils.commitCriticalExceptionRT(instanceId,
+                WXErrorCode.WX_KEY_EXCEPTION_INVOKE, "callNative",
+                WXLogUtils.getStackTrace(e) , null);
       }
-    } catch (Exception e) {
-      WXLogUtils.e("[WXBridgeManager] callCreateBody exception: ", e);
-	  WXExceptionUtils.commitCriticalExceptionRT(instanceId,
-			  WXErrorCode.WX_KEY_EXCEPTION_INVOKE, "callCreateBody",
-			  WXLogUtils.getStackTrace(e), null);
     }
 
     if (UNDEFINED.equals(callback) || NON_CALLBACK.equals(callback)) {
@@ -643,14 +598,13 @@ public class WXBridgeManager implements Callback, BactchExecutor {
     // get next tick
     getNextTick(instanceId, callback);
     return IWXBridge.INSTANCE_RENDERING;
-
   }
 
   // callUpdateFinish
   public int callUpdateFinish(String instanceId, String callback) {
-    if (WXEnvironment.isOpenDebugLog()) {
+    if (WXEnvironment.isApkDebugable() && BRIDGE_LOG_SWITCH) {
       mLodBuilder.append("[WXBridgeManager] callUpdateFinish >>>> instanceId:").append(instanceId)
-          .append(", callback:").append(callback);
+              .append(", callback:").append(callback);
       WXLogUtils.d(mLodBuilder.substring(0));
       mLodBuilder.setLength(0);
     }
@@ -661,65 +615,30 @@ public class WXBridgeManager implements Callback, BactchExecutor {
 
     try {
       if (WXSDKManager.getInstance().getSDKInstance(instanceId) != null) {
-        WXDomModule domModule = getDomModule(instanceId);
-        Action action = Actions.getUpdateFinish();
-        domModule.postAction((DOMAction) action, false);
+//        WXDomModule domModule = getDomModule(instanceId);
+//        Action action = Actions.getUpdateFinish();
+//        domModule.postAction((DOMAction) action, false);
       }
     } catch (Exception e) {
       WXLogUtils.e("[WXBridgeManager] callUpdateFinish exception: ", e);
-	  WXExceptionUtils.commitCriticalExceptionRT(instanceId,
-			  WXErrorCode.WX_KEY_EXCEPTION_INVOKE, "callUpdateFinish",
-			  WXLogUtils.getStackTrace(e), null);
-    }
-
-    if (UNDEFINED.equals(callback) || NON_CALLBACK.equals(callback)) {
-      return IWXBridge.INSTANCE_RENDERING_ERROR;
-    }
-    // get next tick
-    getNextTick(instanceId, callback);
-    return IWXBridge.INSTANCE_RENDERING;
-  }
-
-  // callCreateFinish
-  public int callCreateFinish(String instanceId, String callback) {
-    if (WXEnvironment.isOpenDebugLog()) {
-    mLodBuilder.append("[WXBridgeManager] callCreateFinish >>>> instanceId:").append(instanceId)
-        .append(", callback:").append(callback);
-    WXLogUtils.d(mLodBuilder.substring(0));
-    mLodBuilder.setLength(0);
-     }
-
-    if (mDestroyedInstanceId != null && mDestroyedInstanceId.contains(instanceId)) {
-      return IWXBridge.DESTROY_INSTANCE;
-    }
-
-    try {
-      if (WXSDKManager.getInstance().getSDKInstance(instanceId) != null) {
-        WXDomModule domModule = getDomModule(instanceId);
-        Action action = Actions.getCreateFinish();
-        domModule.postAction((DOMAction) action, false);
-      }
-    } catch (Exception e) {
-      WXLogUtils.e("[WXBridgeManager] callCreateFinish exception: ", e);
-	  WXExceptionUtils.commitCriticalExceptionRT(instanceId,
-			  WXErrorCode.WX_KEY_EXCEPTION_INVOKE, "callUpdateFinish",
-			  WXLogUtils.getStackTrace(e), null);
+      WXExceptionUtils.commitCriticalExceptionRT(instanceId,
+              WXErrorCode.WX_KEY_EXCEPTION_INVOKE, "callUpdateFinish",
+              WXLogUtils.getStackTrace(e), null);
     }
 
-    if (UNDEFINED.equals(callback) || NON_CALLBACK.equals(callback)) {
+    if (callback == null || callback.isEmpty() || UNDEFINED.equals(callback) || NON_CALLBACK.equals(callback)) {
       return IWXBridge.INSTANCE_RENDERING_ERROR;
     }
     // get next tick
     getNextTick(instanceId, callback);
     return IWXBridge.INSTANCE_RENDERING;
-
   }
 
   // callRefreshFinish
   public int callRefreshFinish(String instanceId, String callback) {
-    if (WXEnvironment.isOpenDebugLog()) {
+    if (WXEnvironment.isApkDebugable() && BRIDGE_LOG_SWITCH) {
       mLodBuilder.append("[WXBridgeManager] callRefreshFinish >>>> instanceId:").append(instanceId)
-          .append(", callback:").append(callback);
+              .append(", callback:").append(callback);
       WXLogUtils.d(mLodBuilder.substring(0));
       mLodBuilder.setLength(0);
     }
@@ -729,16 +648,16 @@ public class WXBridgeManager implements Callback, BactchExecutor {
     }
 
     try {
-      if (WXSDKManager.getInstance().getSDKInstance(instanceId) != null) {
-        WXDomModule domModule = getDomModule(instanceId);
-        Action action = Actions.getRefreshFinish();
-        domModule.postAction((DOMAction) action, false);
-      }
+        WXSDKInstance instance = WXSDKManager.getInstance().getSDKInstance(instanceId);
+        if (instance != null) {
+          GraphicActionRefreshFinish action = new GraphicActionRefreshFinish(instanceId);
+          WXSDKManager.getInstance().getWXRenderManager().postGraphicAction(instanceId, action);
+        }
     } catch (Exception e) {
       WXLogUtils.e("[WXBridgeManager] callRefreshFinish exception: ", e);
-	  WXExceptionUtils.commitCriticalExceptionRT(instanceId,
-			  WXErrorCode.WX_KEY_EXCEPTION_INVOKE, "callRefreshFinish",
-			  WXLogUtils.getStackTrace(e), null);
+      WXExceptionUtils.commitCriticalExceptionRT(instanceId,
+              WXErrorCode.WX_KEY_EXCEPTION_INVOKE, "callRefreshFinish",
+              WXLogUtils.getStackTrace(e), null);
     }
 
     if (UNDEFINED.equals(callback) || NON_CALLBACK.equals(callback)) {
@@ -750,441 +669,127 @@ public class WXBridgeManager implements Callback, BactchExecutor {
 
   }
 
-  // callUpdateAttrs
-  public int callUpdateAttrs(String instanceId, String ref, String task, String callback) {
-    if (TextUtils.isEmpty(task)) {
-      WXLogUtils.e("[WXBridgeManager] callUpdateAttrs: call UpdateAttrs tasks is null");
-	  WXExceptionUtils.commitCriticalExceptionRT(instanceId,
-			  WXErrorCode.WX_KEY_EXCEPTION_INVOKE, "callUpdateAttrs",
-			  "call UpdateAttrs tasks is null| INSTANCE_RENDERING_ERROR will be set", null);
-
-      return IWXBridge.INSTANCE_RENDERING_ERROR;
-    }
-    if (WXEnvironment.isOpenDebugLog()) {
-      mLodBuilder.append("[WXBridgeManager] callUpdateAttrs >>>> instanceId:").append(instanceId)
-          .append(", ref:").append(ref)
-          .append(", task:").append(task)
-          .append(", callback:").append(callback);
-      WXLogUtils.d(mLodBuilder.substring(0));
-      mLodBuilder.setLength(0);
-    }
-
-    if (mDestroyedInstanceId != null && mDestroyedInstanceId.contains(instanceId)) {
-      return IWXBridge.DESTROY_INSTANCE;
-    }
-
+  public int callReportCrashReloadPage(String instanceId, String crashFile) {
     try {
-      if (WXSDKManager.getInstance().getSDKInstance(instanceId) != null) {
-        WXDomModule domModule = getDomModule(instanceId);
-        long start = System.currentTimeMillis();
-        long parseNanos = System.nanoTime();
-        JSONObject domObject = JSON.parseObject(task);
-        parseNanos = System.nanoTime() - parseNanos;
-
-        Action action = Actions.getUpdateAttrs(ref, domObject);
-        domModule.postAction((DOMAction) action, false);
-
-        if (WXTracing.isAvailable() && action instanceof TraceableAction) {
-          ((TraceableAction) action).mStartMillis = start;
-          ((TraceableAction) action).mParseJsonNanos = parseNanos;
-          ((TraceableAction) action).onStartDomExecute(instanceId, "updateAttrs", domObject.getString("ref"), domObject.getString("type"), task);
+      String url = null;
+      WXSDKInstance instance = WXSDKManager.getInstance().getSDKInstance(instanceId);
+      if (instance != null) {
+        url = instance.getBundleUrl();
+      }
+      try {
+        if (WXEnvironment.getApplication() != null) {
+          crashFile = WXEnvironment.getApplication().getApplicationContext().getCacheDir().getPath() + crashFile;
+          // Log.e("jsengine", "callReportCrashReloadPage crashFile:" + crashFile);
         }
+      } catch (Throwable e) {
+        e.printStackTrace();
       }
-    } catch (Exception e) {
-      WXLogUtils.e("[WXBridgeManager] callUpdateAttrs exception: ", e);
-	  WXExceptionUtils.commitCriticalExceptionRT(instanceId,
-			  WXErrorCode.WX_KEY_EXCEPTION_INVOKE, "callUpdateAttrs",
-			  WXLogUtils.getStackTrace(e), null);
-    }
-
-    if (UNDEFINED.equals(callback) || NON_CALLBACK.equals(callback)) {
-      return IWXBridge.INSTANCE_RENDERING_ERROR;
-    }
-    // get next tick
-    getNextTick(instanceId, callback);
-    return IWXBridge.INSTANCE_RENDERING;
-
-  }
-
-  // callUpdateStyle
-  public int callUpdateStyle(String instanceId, String ref, String task, String callback) {
-    if (TextUtils.isEmpty(task)) {
-      WXLogUtils.e("[WXBridgeManager] callUpdateStyle: call UpdateStyle tasks is null");
-	  WXExceptionUtils.commitCriticalExceptionRT(instanceId,
-			  WXErrorCode.WX_KEY_EXCEPTION_INVOKE, "callUpdateStyle",
-			  "task is empty", null);
-	  return IWXBridge.INSTANCE_RENDERING_ERROR;
-    }
-   if (WXEnvironment.isOpenDebugLog()) {
-    mLodBuilder.append("[WXBridgeManager] callUpdateStyle >>>> instanceId:").append(instanceId)
-        .append(", ref:").append(ref)
-        .append(", task:").append(task)
-        .append(", callback:").append(callback);
-    WXLogUtils.d(mLodBuilder.substring(0));
-    mLodBuilder.setLength(0);
-    }
+      callReportCrash(crashFile, instanceId, url);
+      if (reInitCount > CRASHREINIT) {
+        return IWXBridge.INSTANCE_RENDERING_ERROR;
+      }
+      reInitCount++;
+      // reinit frame work
+      setJSFrameworkInit(false);
+      WXModuleManager.resetAllModuleState();
+      initScriptsFramework("");
 
-    if (mDestroyedInstanceId != null && mDestroyedInstanceId.contains(instanceId)) {
-      return IWXBridge.DESTROY_INSTANCE;
+      if (mDestroyedInstanceId != null && mDestroyedInstanceId.contains(instanceId)) {
+        return IWXBridge.DESTROY_INSTANCE;
+      }
+    } catch (Exception e) {
+      WXLogUtils.e("[WXBridgeManager] callReportCrashReloadPage exception: ", e);
     }
-
     try {
-      if (WXSDKManager.getInstance().getSDKInstance(instanceId) != null) {
-        WXDomModule domModule = getDomModule(instanceId);
-        long start = System.currentTimeMillis();
-        long nanosTemp = System.nanoTime();
-        JSONObject domObject = JSON.parseObject(task);
-        nanosTemp = System.nanoTime() - nanosTemp;
 
-        Action action = Actions.getUpdateStyle(ref, domObject, false);
-        domModule.postAction((DOMAction) action, false);
-
-        if (WXTracing.isAvailable() && action instanceof TraceableAction) {
-          ((TraceableAction) action).mParseJsonNanos = nanosTemp;
-          ((TraceableAction) action).mStartMillis = start;
-          ((TraceableAction) action).onStartDomExecute(instanceId, "updateStyle", ref, domObject.getString("type"), domObject.toJSONString());
-        }
+      if (WXSDKManager.getInstance().getSDKInstance(instanceId) != null) {
+        boolean reloadThisInstance = shouReloadCurrentInstance(
+                WXSDKManager.getInstance().getSDKInstance(instanceId).getBundleUrl());
+        new ActionReloadPage(instanceId, reloadThisInstance).executeAction();
       }
-    } catch (Exception e) {
-      WXLogUtils.e("[WXBridgeManager] callUpdateStyle exception: ", e);
-	  WXExceptionUtils.commitCriticalExceptionRT(instanceId,
-			  WXErrorCode.WX_KEY_EXCEPTION_INVOKE, "callUpdateStyle",
-			  WXLogUtils.getStackTrace(e), null);
-    }
 
-    if (UNDEFINED.equals(callback) || NON_CALLBACK.equals(callback)) {
-      return IWXBridge.INSTANCE_RENDERING_ERROR;
+    } catch (Exception e) {
+      WXLogUtils.e("[WXBridgeManager] callReloadPage exception: ", e);
+      WXExceptionUtils.commitCriticalExceptionRT(instanceId,
+              WXErrorCode.WX_KEY_EXCEPTION_INVOKE, "callReloadPage",
+              WXLogUtils.getStackTrace(e), null);
     }
-    // get next tick
-    getNextTick(instanceId, callback);
-    return IWXBridge.INSTANCE_RENDERING;
+    return IWXBridge.INSTANCE_RENDERING_ERROR;
   }
 
-  // callUpdateStyle
-  public int callRemoveElement(String instanceId, String ref, String callback) {
-
-    if (WXEnvironment.isOpenDebugLog()) {
-      mLodBuilder.append("[WXBridgeManager] callRemoveElement >>>> instanceId:").append(instanceId)
-          .append(", ref:").append(ref);
-      WXLogUtils.d(mLodBuilder.substring(0));
-      mLodBuilder.setLength(0);
+  public boolean shouReloadCurrentInstance(String aUrl) {
+    long time = System.currentTimeMillis();
+    if (crashUrl == null ||
+            (crashUrl != null && !crashUrl.equals(aUrl)) ||
+            ((time - lastCrashTime) > 15000)) {
+      crashUrl = aUrl;
+      lastCrashTime = time;
+      return true;
     }
+    lastCrashTime = time;
+    return false;
+  }
 
-    if (mDestroyedInstanceId != null && mDestroyedInstanceId.contains(instanceId)) {
-      return IWXBridge.DESTROY_INSTANCE;
+  public void callReportCrash(String crashFile, final String instanceId, final String url) {
+    // statistic weexjsc process crash
+    Date date = new Date();
+    DateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");
+    String time = format.format(date);
+    final String origin_filename = crashFile + "." + time;
+    File oldfile = new File(crashFile);
+    File newfile = new File(origin_filename);
+    if (oldfile.exists()) {
+      oldfile.renameTo(newfile);
     }
-
-    try {
-      if (WXSDKManager.getInstance().getSDKInstance(instanceId) != null) {
-        WXDomModule domModule = getDomModule(instanceId);
-        Action action = Actions.getRemoveElement(ref);
-        domModule.postAction((DOMAction) action, false);
-
-        if (WXTracing.isAvailable() && action instanceof TraceableAction) {
-          ((TraceableAction) action).onStartDomExecute(instanceId, "removeElement", ref, null, ref);
+    Thread t = new Thread(new Runnable() {
+      public void run() {
+        try {
+          File file = new File(origin_filename);
+          if (file.exists()) {
+            if (file.length() > 0) {
+              StringBuilder result = new StringBuilder();
+              try {
+                BufferedReader br = new BufferedReader(new FileReader(origin_filename));
+                String s = null;
+                // boolean foundStart = false;
+                while ((s = br.readLine()) != null) {
+                  if ("".equals(s)) {
+                    continue;
+                  }
+                  // if (("r0:").equals(s)) {
+                  //  break;
+                  // }
+                  result.append(s + "\n");
+                }
+                commitJscCrashAlarmMonitor(IWXUserTrackAdapter.JS_BRIDGE, WXErrorCode.WX_ERR_JSC_CRASH, result.toString(), instanceId, url);
+                br.close();
+              } catch (Exception e) {
+                e.printStackTrace();
+              }
+            } else {
+              WXLogUtils.e("[WXBridgeManager] callReportCrash crash file is empty");
+            }
+            file.delete();
+          }
+        } catch (Throwable throwable) {
+          WXLogUtils.e("[WXBridgeManager] callReportCrash exception: ", throwable);
         }
       }
-    } catch (Exception e) {
-      WXLogUtils.e("[WXBridgeManager] callRemoveElement exception: ", e);
-	  WXExceptionUtils.commitCriticalExceptionRT(instanceId,
-			  WXErrorCode.WX_KEY_EXCEPTION_INVOKE, "callRemoveElement",
-			  WXLogUtils.getStackTrace(e), null);
-    }
-
-    if (UNDEFINED.equals(callback) || NON_CALLBACK.equals(callback)) {
-      return IWXBridge.INSTANCE_RENDERING_ERROR;
-    }
-    // get next tick
-    getNextTick(instanceId, callback);
-    return IWXBridge.INSTANCE_RENDERING;
+    });
+    t.start();
   }
 
-  // callMoveElement
-  public int callMoveElement(String instanceId, String ref, String parentref, String index, String callback) {
-
-    if (WXEnvironment.isOpenDebugLog()) {
-      mLodBuilder.append("[WXBridgeManager] callMoveElement >>>> instanceId:").append(instanceId)
-          .append(", parentref:").append(parentref)
-          .append(", index:").append(index)
-          .append(", ref:").append(ref);
-      WXLogUtils.d(mLodBuilder.substring(0));
-      mLodBuilder.setLength(0);
-    }
-
-    if (mDestroyedInstanceId != null && mDestroyedInstanceId.contains(instanceId)) {
-      return IWXBridge.DESTROY_INSTANCE;
-    }
-
-    try {
-      if (WXSDKManager.getInstance().getSDKInstance(instanceId) != null) {
-        WXDomModule domModule = getDomModule(instanceId);
-        Action action = Actions.getMoveElement(ref, parentref, Integer.parseInt(index));
-        domModule.postAction((DOMAction) action, false);
-      }
-    } catch (Exception e) {
-      WXLogUtils.e("[WXBridgeManager] callMoveElement exception: ", e);
-	  WXExceptionUtils.commitCriticalExceptionRT(instanceId,
-			  WXErrorCode.WX_KEY_EXCEPTION_INVOKE, "callMoveElement",
-			  WXLogUtils.getStackTrace(e), null);
-
-	}
-
-    if (UNDEFINED.equals(callback) || NON_CALLBACK.equals(callback)) {
-      return IWXBridge.INSTANCE_RENDERING_ERROR;
-    }
-    // get next tick
-    getNextTick(instanceId, callback);
-    return IWXBridge.INSTANCE_RENDERING;
-  }
-
-  public int callAddEvent(String instanceId, String ref, String event, String callback) {
-
-   if (WXEnvironment.isOpenDebugLog()) {
-    mLodBuilder.append("[WXBridgeManager] callAddEvent >>>> instanceId:").append(instanceId)
-        .append(", ref:").append(ref)
-        .append(", event:").append(event);
-    WXLogUtils.d(mLodBuilder.substring(0));
-    mLodBuilder.setLength(0);
-   }
-
-    if (mDestroyedInstanceId != null && mDestroyedInstanceId.contains(instanceId)) {
-      return IWXBridge.DESTROY_INSTANCE;
-    }
-
-    try {
-      if (WXSDKManager.getInstance().getSDKInstance(instanceId) != null) {
-        WXDomModule domModule = getDomModule(instanceId);
-        Action action = Actions.getAddEvent(ref, event);
-        domModule.postAction((DOMAction) action, false);
-
-        if (WXTracing.isAvailable() && action instanceof TraceableAction) {
-          ((TraceableAction) action).onStartDomExecute(instanceId, "addEvent", ref, null, event);
-        }
-      }
-    } catch (Exception e) {
-      WXLogUtils.e("[WXBridgeManager] callAddEvent exception: ", e);
-	  WXExceptionUtils.commitCriticalExceptionRT(instanceId,
-			  WXErrorCode.WX_KEY_EXCEPTION_INVOKE, "callAddEvent",
-			  WXLogUtils.getStackTrace(e), null);
-    }
-
-    if (UNDEFINED.equals(callback) || NON_CALLBACK.equals(callback)) {
-      return IWXBridge.INSTANCE_RENDERING_ERROR;
-    }
-    // get next tick
-    getNextTick(instanceId, callback);
-    return IWXBridge.INSTANCE_RENDERING;
-  }
-
-  public int callRemoveEvent(String instanceId, String ref, String event, String callback) {
-
-    if (WXEnvironment.isOpenDebugLog()) {
-      mLodBuilder.append("[WXBridgeManager] callRemoveEvent >>>> instanceId:").append(instanceId)
-          .append(", ref:").append(ref)
-          .append(", event:").append(event);
-      WXLogUtils.d(mLodBuilder.substring(0));
-      mLodBuilder.setLength(0);
-    }
-
-    if (mDestroyedInstanceId != null && mDestroyedInstanceId.contains(instanceId)) {
-      return IWXBridge.DESTROY_INSTANCE;
-    }
-
-    try {
-      if (WXSDKManager.getInstance().getSDKInstance(instanceId) != null) {
-        WXDomModule domModule = getDomModule(instanceId);
-        Action action = Actions.getRemoveEvent(ref, event);
-        domModule.postAction((DOMAction) action, false);
-
-        if (WXTracing.isAvailable() && action instanceof TraceableAction) {
-          ((TraceableAction) action).onStartDomExecute(instanceId, "removeEvent", ref, null, event);
-        }
-      }
-    } catch (Exception e) {
-      WXLogUtils.e("[WXBridgeManager] callRemoveEvent exception: ", e);
-	  WXExceptionUtils.commitCriticalExceptionRT(instanceId,
-			  WXErrorCode.WX_KEY_EXCEPTION_INVOKE, "callAddEvent",
-			  WXLogUtils.getStackTrace(e), null);
-    }
-
-    if (UNDEFINED.equals(callback) || NON_CALLBACK.equals(callback)) {
-      return IWXBridge.INSTANCE_RENDERING_ERROR;
-    }
-    // get next tick
-    getNextTick(instanceId, callback);
-    return IWXBridge.INSTANCE_RENDERING;
-  }
-
-  public int callAddElement(String instanceId, String ref, JSONObject dom, String index, String callback) {
-
-    if (WXEnvironment.isOpenDebugLog()) {
-      mLodBuilder.append("[WXBridgeManager] callNative::callAddElement >>>> instanceId:").append(instanceId)
-          .append(", ref:").append(ref).append(", dom:").append(dom).append(", callback:").append(callback);
-      WXLogUtils.d(mLodBuilder.substring(0));
-      mLodBuilder.setLength(0);
-    }
-
-    if (mDestroyedInstanceId != null && mDestroyedInstanceId.contains(instanceId)) {
-      return IWXBridge.DESTROY_INSTANCE;
-    }
-
-
-    if (WXSDKManager.getInstance().getSDKInstance(instanceId) != null) {
-      long start = System.currentTimeMillis();
-      long nanosTemp = System.nanoTime();
-      JSONObject domObject = dom;
-      nanosTemp = System.nanoTime() - nanosTemp;
-
-      if (WXSDKManager.getInstance().getSDKInstance(instanceId) != null) {
-        WXSDKManager.getInstance().getSDKInstance(instanceId).jsonParseTime(System.currentTimeMillis() - start);
-      }
-      WXDomModule domModule = getDomModule(instanceId);
-      DOMAction addElementAction = Actions.getAddElement(domObject, ref, Integer.parseInt(index));
-      domModule.postAction(addElementAction, false);
-
-      if (WXTracing.isAvailable() && addElementAction instanceof TraceableAction) {
-        ((TraceableAction) addElementAction).mParseJsonNanos = nanosTemp;
-        ((TraceableAction) addElementAction).mStartMillis = start;
-        ((TraceableAction) addElementAction).onStartDomExecute(instanceId, "addElement", domObject.getString("ref"), domObject.getString("type"), dom.toString());
-      }
-    }
-
-    if (UNDEFINED.equals(callback) || NON_CALLBACK.equals(callback)) {
-      return IWXBridge.INSTANCE_RENDERING_ERROR;
-    }
-    // get next tick
-    getNextTick(instanceId, callback);
-    return IWXBridge.INSTANCE_RENDERING;
-
-  }
-
-  public int callReportCrashReloadPage(String instanceId, String crashFile) {
-    try {
-      String url = null;
-      WXSDKInstance instance = WXSDKManager.getInstance().getSDKInstance(instanceId);
-      if (instance != null) {
-        url = instance.getBundleUrl();
-      }
-      try {
-        if (WXEnvironment.getApplication() != null) {
-          crashFile = WXEnvironment.getApplication().getApplicationContext().getCacheDir().getPath() + crashFile;
-          // Log.e("jsengine", "callReportCrashReloadPage crashFile:" + crashFile);
-        }
-      } catch (Throwable e) {
-        e.printStackTrace();
-      }
-      callReportCrash(crashFile, instanceId, url);
-      if (reInitCount > CRASHREINIT) {
-        return IWXBridge.INSTANCE_RENDERING_ERROR;
-      }
-      reInitCount++;
-      // reinit frame work
-      setJSFrameworkInit(false);
-      WXModuleManager.resetAllModuleState();
-      initScriptsFramework("");
-
-      if (mDestroyedInstanceId != null && mDestroyedInstanceId.contains(instanceId)) {
-        return IWXBridge.DESTROY_INSTANCE;
-      }
-    } catch (Exception e) {
-      WXLogUtils.e("[WXBridgeManager] callReportCrashReloadPage exception: ", e);
-    }
-    try {
-
-      if (WXSDKManager.getInstance().getSDKInstance(instanceId) != null) {
-        boolean reloadThisInstance = shouReloadCurrentInstance(
-            WXSDKManager.getInstance().getSDKInstance(instanceId).getBundleUrl());
-        WXDomModule domModule = getDomModule(instanceId);
-        Action action = Actions.getReloadPage(instanceId, reloadThisInstance);
-        domModule.postAction((DOMAction) action, true);
-      }
-
-    } catch (Exception e) {
-      WXLogUtils.e("[WXBridgeManager] callReloadPage exception: ", e);
-	  WXExceptionUtils.commitCriticalExceptionRT(instanceId,
-			  WXErrorCode.WX_KEY_EXCEPTION_INVOKE, "callReloadPage",
-			  WXLogUtils.getStackTrace(e), null);
-    }
-    return IWXBridge.INSTANCE_RENDERING_ERROR;
-  }
-
-  public boolean shouReloadCurrentInstance(String aUrl) {
-    long time = System.currentTimeMillis();
-    if (crashUrl == null ||
-        (crashUrl != null && !crashUrl.equals(aUrl)) ||
-        ((time - lastCrashTime) > 15000)) {
-      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();
-    DateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");
-    String time = format.format(date);
-    final String origin_filename = crashFile + "." + time;
-    File oldfile = new File(crashFile);
-    File newfile = new File(origin_filename);
-    if (oldfile.exists()) {
-      oldfile.renameTo(newfile);
-    }
-    Thread t = new Thread(new Runnable() {
-      public void run() {
-        try {
-          File file = new File(origin_filename);
-          if (file.exists()) {
-            if (file.length() > 0) {
-              StringBuilder result = new StringBuilder();
-              try {
-                BufferedReader br = new BufferedReader(new FileReader(origin_filename));
-                String s = null;
-                // boolean foundStart = false;
-                while ((s = br.readLine()) != null) {
-                  if ("".equals(s)) {
-                    continue;
-                  }
-                  // if (("r0:").equals(s)) {
-                  //  break;
-                  // }
-                  result.append(s + "\n");
-                }
-                commitJscCrashAlarmMonitor(IWXUserTrackAdapter.JS_BRIDGE, WXErrorCode.WX_ERR_JSC_CRASH, result.toString(), instanceId, url);
-                br.close();
-              } catch (Exception e) {
-                e.printStackTrace();
-              }
-            } else {
-              WXLogUtils.e("[WXBridgeManager] callReportCrash crash file is empty");
-            }
-            file.delete();
-          }
-        } catch (Throwable throwable) {
-          WXLogUtils.e("[WXBridgeManager] callReportCrash exception: ", throwable);
-        }
-      }
-    });
-    t.start();
-  }
-
-  private void getNextTick(final String instanceId, final String callback) {
-    addJSTask(METHOD_CALLBACK, instanceId, callback, "{}");
-    sendMessage(instanceId, WXJSBridgeMsgType.CALL_JS_BATCH);
-  }
+  private void getNextTick(final String instanceId, final String callback) {
+    addJSTask(METHOD_CALLBACK, instanceId, callback, "{}");
+    sendMessage(instanceId, WXJSBridgeMsgType.CALL_JS_BATCH);
+  }
 
+  private void getNextTick(final String instanceId) {
+    addJSTask(METHOD_CALLBACK, instanceId, "", "{}");
+    sendMessage(instanceId, WXJSBridgeMsgType.CALL_JS_BATCH);
+  }
 
   public String syncExecJsOnInstanceWithResult(final String instanceId, final String js, final int type) {
-    try {
-      if (isJSThread()) {
-        return invokeExecJSOnInstance(instanceId, js, type);
-      }
-    } catch (Throwable e) {
-      WXLogUtils.e("[WXBridgeManager] syncExecJsOnInstanceWithResult on jsThread Exception");
-      return "";
-    }
     final CountDownLatch waitLatch = new CountDownLatch(1);
     EventResult callback = new EventResult(){
       @Override
@@ -1250,7 +855,7 @@ public class WXBridgeManager implements Callback, BactchExecutor {
           Object[] tasks = {task};
           WXJSObject[] jsArgs = {
                   new WXJSObject(WXJSObject.String, instanceId),
-                  WXJsonUtils.wsonWXJSObject(tasks)};
+                  new WXJSObject(WXJSObject.JSON, WXJsonUtils.fromObjectToJSONString(tasks))};
           invokeExecJS(String.valueOf(instanceId), null, METHOD_CALL_JS, jsArgs, true);
           jsArgs[0] = null;
           jsArgs = null;
@@ -1261,9 +866,9 @@ public class WXBridgeManager implements Callback, BactchExecutor {
     });
   }
 
-    /**
-     * aync call js event and return result in eventResult callback
-     * */
+  /**
+   * aync call js event and return result in eventResult callback
+   * */
   private void asyncCallJSEventWithResult(final EventResult eventCallback, final String method, final String instanceId, final List<Object> params, final Object... args) {
     post(new Runnable() {
       @Override
@@ -1290,13 +895,13 @@ public class WXBridgeManager implements Callback, BactchExecutor {
           Object[] tasks = {task};
           WXJSObject[] jsArgs = {
                   new WXJSObject(WXJSObject.String, instanceId),
-                  WXJsonUtils.wsonWXJSObject(tasks)};
+                  new WXJSObject(WXJSObject.JSON, WXJsonUtils.fromObjectToJSONString(tasks))};
           byte[] taskResult = invokeExecJSWithResult(String.valueOf(instanceId), null, METHOD_CALL_JS, jsArgs, true);
           if(eventCallback == null){
             return;
           }
           if(taskResult != null){
-            JSONArray arrayResult = (JSONArray) WXJsonUtils.parseWson(taskResult);
+            JSONArray arrayResult = (JSONArray) JSON.parse(new String(taskResult, "UTF-8"));
             if(arrayResult != null && arrayResult.size() > 0){
               result = arrayResult.get(0);
             }
@@ -1312,7 +917,6 @@ public class WXBridgeManager implements Callback, BactchExecutor {
     });
   }
 
-
   private void addJSEventTask(final String method, final String instanceId, final List<Object> params, final Object... args) {
     post(new Runnable() {
       @Override
@@ -1413,12 +1017,12 @@ public class WXBridgeManager implements Callback, BactchExecutor {
                               final String type, final Map<String, Object> data,
                               final Map<String, Object> domChanges, List<Object> params,  EventResult callback) {
     if (TextUtils.isEmpty(instanceId) || TextUtils.isEmpty(ref)
-        || TextUtils.isEmpty(type) || mJSHandler == null) {
+            || TextUtils.isEmpty(type) || mJSHandler == null) {
       return;
     }
     if (!checkMainThread()) {
       throw new WXRuntimeException(
-          "fireEvent must be called by main thread");
+              "fireEvent must be called by main thread");
     }
     if(callback == null) {
       addJSEventTask(METHOD_FIRE_EVENT, instanceId, params, ref, type, data, domChanges);
@@ -1477,7 +1081,7 @@ public class WXBridgeManager implements Callback, BactchExecutor {
   void callbackJavascript(final String instanceId, final String callback,
                           final Object data, boolean keepAlive) {
     if (TextUtils.isEmpty(instanceId) || TextUtils.isEmpty(callback)
-        || mJSHandler == null) {
+            || mJSHandler == null) {
       return;
     }
 
@@ -1506,88 +1110,40 @@ public class WXBridgeManager implements Callback, BactchExecutor {
         WXSDKInstance instance = WXSDKManager.getInstance().getSDKInstance(instanceId);
         if (instance != null) {
           instance.onRenderError(
-				 WXErrorCode.WX_DEGRAD_ERR_INSTANCE_CREATE_FAILED.getErrorCode(),
-				  WXErrorCode.WX_DEGRAD_ERR_INSTANCE_CREATE_FAILED.getErrorMsg()
-				  + "invokeRefreshInstance FAILED for JSFrameworkInit FAILED, intance will invoke instance.onRenderError"
-		  );
+                  WXErrorCode.WX_DEGRAD_ERR_INSTANCE_CREATE_FAILED.getErrorCode(),
+                  WXErrorCode.WX_DEGRAD_ERR_INSTANCE_CREATE_FAILED.getErrorMsg()
+                          + "invokeRefreshInstance FAILED for JSFrameworkInit FAILED, intance will invoke instance.onRenderError"
+          );
         }
         String err = "[WXBridgeManager] invokeRefreshInstance: framework.js uninitialized.";
         WXLogUtils.e(err);
         return;
       }
       long start = System.currentTimeMillis();
-      if (WXEnvironment.isOpenDebugLog()) {
+      if (WXEnvironment.isApkDebugable()) {
         WXLogUtils.d("refreshInstance >>>> instanceId:" + instanceId
-            + ", data:" + refreshData.data + ", isDirty:" + refreshData.isDirty);
+                + ", data:" + refreshData.data + ", isDirty:" + refreshData.isDirty);
       }
 
       if (refreshData.isDirty) {
         return;
       }
       WXJSObject instanceIdObj = new WXJSObject(WXJSObject.String,
-          instanceId);
+              instanceId);
       WXJSObject dataObj = new WXJSObject(WXJSObject.JSON,
-          refreshData.data == null ? "{}" : refreshData.data);
+              refreshData.data == null ? "{}" : refreshData.data);
       WXJSObject[] args = {instanceIdObj, dataObj};
       invokeExecJS(instanceId, null, METHOD_REFRESH_INSTANCE, args);
       WXLogUtils.renderPerformanceLog("invokeRefreshInstance", System.currentTimeMillis() - start);
     } catch (Throwable e) {
       String err = "[WXBridgeManager] invokeRefreshInstance " + WXLogUtils.getStackTrace(e);
-	  WXExceptionUtils.commitCriticalExceptionRT(instanceId,
-			  WXErrorCode.WX_KEY_EXCEPTION_INVOKE, "invokeRefreshInstance",
-			  err, null);
+      WXExceptionUtils.commitCriticalExceptionRT(instanceId,
+              WXErrorCode.WX_KEY_EXCEPTION_INVOKE, "invokeRefreshInstance",
+              err, null);
       WXLogUtils.e(err);
     }
   }
 
-//  public void commitJSBridgeAlarmMonitor(String instanceId, WXErrorCode errCode, String errMsg) {
-//    WXSDKInstance instance = WXSDKManager.getInstance().getSDKInstance(instanceId);
-//    if (instance == null || errCode == null) {
-//      return;
-//    }
-//    // TODO: We should move WXPerformance and IWXUserTrackAdapter
-//    // into a adapter level.
-//    // comment out the line below to prevent commiting twice.
-//    //instance.commitUTStab(WXConst.JS_BRIDGE, errCode, errMsg);
-//
-//    IWXUserTrackAdapter adapter = WXSDKManager.getInstance().getIWXUserTrackAdapter();
-//    if (adapter == null) {
-//      return;
-//    }
-//    WXPerformance performance = new WXPerformance();
-//    performance.args = instance.getBundleUrl();
-//    performance.errCode = errCode.getErrorCode();
-//    if (errCode != WXErrorCode.WX_SUCCESS) {
-//      performance.appendErrMsg(TextUtils.isEmpty(errMsg) ? errCode.getErrorMsg() : errMsg);
-//      WXLogUtils.e("wx_monitor", performance.toString());
-//    }
-//    adapter.commit(WXEnvironment.getApplication(), null, IWXUserTrackAdapter.JS_BRIDGE, performance, instance.getUserTrackParams());
-//  }
-
-//  public void commitJSFrameworkAlarmMonitor(final String type, final WXErrorCode errorCode, String errMsg) {
-//    if (TextUtils.isEmpty(type) || errorCode == null) {
-//      return;
-//    }
-//    if (WXSDKManager.getInstance().getWXStatisticsListener() != null) {
-//      WXSDKManager.getInstance().getWXStatisticsListener().onException("0",
-//          errorCode.getErrorCode(),
-//          TextUtils.isEmpty(errMsg) ? errorCode.getErrorMsg() : errMsg);
-//    }
-//
-//    final IWXUserTrackAdapter userTrackAdapter = WXSDKManager.getInstance().getIWXUserTrackAdapter();
-//    if (userTrackAdapter == null) {
-//      return;
-//    }
-//    WXPerformance performance = new WXPerformance();
-//    performance.errCode = errorCode.getErrorCode();
-//    if (errorCode != WXErrorCode.WX_SUCCESS) {
-//      performance.appendErrMsg(TextUtils.isEmpty(errMsg) ? errorCode.getErrorMsg() : errMsg);
-//      WXLogUtils.e("wx_monitor", performance.toString());
-//    }
-//    userTrackAdapter.commit(WXEnvironment.getApplication(), null, type, performance, null);
-//  }
-
-
   public void commitJscCrashAlarmMonitor(final String type, final WXErrorCode errorCode, String errMsg,
                                          String instanceId, String url) {
     if (TextUtils.isEmpty(type) || errorCode == null) {
@@ -1620,18 +1176,18 @@ public class WXBridgeManager implements Callback, BactchExecutor {
     }
     if (TextUtils.isEmpty(instanceId) || TextUtils.isEmpty(template) || mJSHandler == null) {
       instance.onRenderError(
-			  WXErrorCode.WX_DEGRAD_ERR_INSTANCE_CREATE_FAILED.getErrorCode(),
-			  WXErrorCode.WX_DEGRAD_ERR_INSTANCE_CREATE_FAILED.getErrorMsg() +
-	  " instanceId==" + instanceId + " template ==" + template + " mJSHandler== " + mJSHandler.toString()
-	  );
+              WXErrorCode.WX_DEGRAD_ERR_INSTANCE_CREATE_FAILED.getErrorCode(),
+              WXErrorCode.WX_DEGRAD_ERR_INSTANCE_CREATE_FAILED.getErrorMsg() +
+                      " instanceId==" + instanceId + " template ==" + template + " mJSHandler== " + mJSHandler.toString()
+      );
       return;
     }
 
     if (!isJSFrameworkInit() && reInitCount == 1 && !WXEnvironment.sDebugServerConnectable) {
       instance.onRenderError(
-			  WXErrorCode.WX_DEGRAD_ERR_INSTANCE_CREATE_FAILED.getErrorCode(),
+              WXErrorCode.WX_DEGRAD_ERR_INSTANCE_CREATE_FAILED.getErrorCode(),
               WXErrorCode.WX_DEGRAD_ERR_INSTANCE_CREATE_FAILED.getErrorMsg() +
-	  " isJSFrameworkInit==" + isJSFrameworkInit() + " reInitCount == 1" );
+                      " isJSFrameworkInit==" + isJSFrameworkInit() + " reInitCount == 1" );
       post(new Runnable() {
         @Override
         public void run() {
@@ -1663,7 +1219,6 @@ public class WXBridgeManager implements Callback, BactchExecutor {
 
   private void invokeCreateInstance(@NonNull WXSDKInstance instance, String template,
                                     Map<String, Object> options, String data) {
-
     // add for sandbox, will delete on sandbox ok
     initFramework("");
 
@@ -1671,11 +1226,11 @@ public class WXBridgeManager implements Callback, BactchExecutor {
       mock(instance.getInstanceId());
     } else {
       if (!isJSFrameworkInit()) {
-		String err = "[WXBridgeManager] invokeCreateInstance: framework.js uninitialized.";
-		instance.onRenderError(
-				WXErrorCode.WX_DEGRAD_ERR_INSTANCE_CREATE_FAILED.getErrorCode(),
+        String err = "[WXBridgeManager] invokeCreateInstance: framework.js uninitialized.";
+        instance.onRenderError(
+                WXErrorCode.WX_DEGRAD_ERR_INSTANCE_CREATE_FAILED.getErrorCode(),
                 WXErrorCode.WX_DEGRAD_ERR_INSTANCE_CREATE_FAILED.getErrorMsg()
-		);
+        );
         WXLogUtils.e(err);
         return;
       }
@@ -1695,6 +1250,7 @@ public class WXBridgeManager implements Callback, BactchExecutor {
         } catch (Throwable e) {
           e.printStackTrace();
         }
+
         try {
           if (options == null) {
             options = new HashMap<>();
@@ -1717,23 +1273,23 @@ public class WXBridgeManager implements Callback, BactchExecutor {
           e.printStackTrace();
         }
 
-
-        if (WXEnvironment.isOpenDebugLog()) {
+        if (WXEnvironment.isApkDebugable() && BRIDGE_LOG_SWITCH) {
           WXLogUtils.d("createInstance >>>> instanceId:" + instance.getInstanceId()
-              + ", options:"
-              + WXJsonUtils.fromObjectToJSONString(options)
-              + ", data:" + data);
+                  + ", options:"
+                  + WXJsonUtils.fromObjectToJSONString(options)
+                  + ", data:" + data);
         }
         WXJSObject instanceIdObj = new WXJSObject(WXJSObject.String,
-            instance.getInstanceId());
+                instance.getInstanceId());
         WXJSObject instanceObj = new WXJSObject(WXJSObject.String,
-            template);
+                template);
         WXJSObject optionsObj = new WXJSObject(WXJSObject.JSON,
-            options == null ? "{}"
-                : WXJsonUtils.fromObjectToJSONString(options));
+                options == null ? "{}"
+                        : WXJsonUtils.fromObjectToJSONString(options));
         optionsObj = optionObjConvert(isSandBoxContext, type, optionsObj);
         WXJSObject dataObj = new WXJSObject(WXJSObject.JSON,
-            data == null ? "{}" : data);
+                data == null ? "{}" : data);
+
         WXJSObject apiObj;
         if (type == BundType.Rax) {
           if (mRaxApi == null) {
@@ -1747,8 +1303,10 @@ public class WXBridgeManager implements Callback, BactchExecutor {
         }
 
         WXJSObject[] args = {instanceIdObj, instanceObj, optionsObj,
-            dataObj, apiObj};
+                dataObj, apiObj};
+
         instance.setTemplate(template);
+
         // if { "framework": "Vue" } or  { "framework": "Rax" } will use invokeCreateInstanceContext
         // others will use invokeExecJS
         if (!isSandBoxContext || WXEnvironment.sDebugServerConnectable) {
@@ -1756,20 +1314,20 @@ public class WXBridgeManager implements Callback, BactchExecutor {
           return;
         }
         if (type == BundType.Vue || type == BundType.Rax) {
-          invokeCreateInstanceContext(instance.getInstanceId(), null, METHOD_CREATE_INSTANCE_CONTEXT, args, false);
+          invokeCreateInstanceContext(instance.getInstanceId(), null, METHOD_CREATE_INSTANCE, args, false);
           return;
         } else {
           invokeExecJS(instance.getInstanceId(), null, METHOD_CREATE_INSTANCE, args, false);
           return;
         }
       } catch (Throwable e) {
-		String err = "[WXBridgeManager] invokeCreateInstance " + e.getCause()
-				+ instance.getTemplateInfo();
+        String err = "[WXBridgeManager] invokeCreateInstance " + e.getCause()
+                + instance.getTemplateInfo();
 
         instance.onRenderError(
-        		WXErrorCode.WX_DEGRAD_ERR_INSTANCE_CREATE_FAILED.getErrorCode(),
+                WXErrorCode.WX_DEGRAD_ERR_INSTANCE_CREATE_FAILED.getErrorCode(),
                 WXErrorCode.WX_DEGRAD_ERR_INSTANCE_CREATE_FAILED.getErrorMsg() + err);
-		WXLogUtils.e(err);
+        WXLogUtils.e(err);
       }
     }
   }
@@ -1877,7 +1435,7 @@ public class WXBridgeManager implements Callback, BactchExecutor {
 
   public void destroyInstance(final String instanceId) {
     if (mJSHandler == null
-        || TextUtils.isEmpty(instanceId)) {
+            || TextUtils.isEmpty(instanceId)) {
       return;
     }
     if (mDestroyedInstanceId != null) {
@@ -1900,11 +1458,11 @@ public class WXBridgeManager implements Callback, BactchExecutor {
 
   private void invokeDestroyInstance(String instanceId) {
     try {
-      if (WXEnvironment.isOpenDebugLog()) {
+      if (WXEnvironment.isApkDebugable() && BRIDGE_LOG_SWITCH) {
         WXLogUtils.d("destroyInstance >>>> instanceId:" + instanceId);
       }
       WXJSObject instanceIdObj = new WXJSObject(WXJSObject.String,
-          instanceId);
+              instanceId);
       WXJSObject[] args = {instanceIdObj};
       if (isJSFrameworkInit()) {
         invokeDestoryInstance(instanceId, null, METHOD_DESTROY_INSTANCE, args, true);
@@ -1912,8 +1470,8 @@ public class WXBridgeManager implements Callback, BactchExecutor {
       }
     } catch (Throwable e) {
       String err = "[WXBridgeManager] invokeDestroyInstance " + e.getCause();
-	  WXExceptionUtils.commitCriticalExceptionRT(instanceId,
-			  WXErrorCode.WX_KEY_EXCEPTION_INVOKE, "invokeDestroyInstance", err, null);
+      WXExceptionUtils.commitCriticalExceptionRT(instanceId,
+              WXErrorCode.WX_KEY_EXCEPTION_INVOKE, "invokeDestroyInstance", err, null);
       WXLogUtils.e(err);
     }
   }
@@ -1959,9 +1517,9 @@ public class WXBridgeManager implements Callback, BactchExecutor {
 
   public void invokeExecJS(String instanceId, String namespace, String function,
                            WXJSObject[] args, boolean logTaskDetail) {
-     if (WXEnvironment.isOpenDebugLog()) {
+    if (WXEnvironment.isOpenDebugLog()) {
       mLodBuilder.append("callJS >>>> instanceId:").append(instanceId)
-          .append("function:").append(function);
+              .append("function:").append(function);
       if (logTaskDetail) {
         mLodBuilder.append(" tasks:").append(argsToJSON(args));
       }
@@ -1975,7 +1533,7 @@ public class WXBridgeManager implements Callback, BactchExecutor {
       instance.callJsTime(System.currentTimeMillis()-start);
     }
   }
-  
+
   public void invokeCreateInstanceContext(String instanceId, String namespace, String function,
                                           WXJSObject[] args, boolean logTaskDetail) {
     WXLogUtils.d("invokeCreateInstanceContext instanceId:" + instanceId + " function:"
@@ -1990,7 +1548,7 @@ public class WXBridgeManager implements Callback, BactchExecutor {
     mWXBridge.createInstanceContext(instanceId, namespace, function, args);
   }
 
-public void invokeDestoryInstance(String instanceId, String namespace, String function,
+  public void invokeDestoryInstance(String instanceId, String namespace, String function,
                                     WXJSObject[] args, boolean logTaskDetail) {
     // if (WXEnvironment.isApkDebugable()) {
     mLodBuilder.append("callJS >>>> instanceId:").append(instanceId)
@@ -2023,7 +1581,7 @@ public void invokeDestoryInstance(String instanceId, String namespace, String fu
   }
 
   private byte[] invokeExecJSWithResult(String instanceId, String namespace, String function,
-                                       WXJSObject[] args,boolean logTaskDetail){
+                                        WXJSObject[] args,boolean logTaskDetail){
     if (WXEnvironment.isOpenDebugLog()) {
       mLodBuilder.append("callJS >>>> instanceId:").append(instanceId)
               .append("function:").append(function);
@@ -2040,9 +1598,6 @@ public void invokeDestoryInstance(String instanceId, String namespace, String fu
     StringBuilder builder = new StringBuilder();
     builder.append("[");
     for(WXJSObject object : args){
-      if(object.type == WXJSObject.WSON){
-        object = new WXJSObject(WXJSObject.WSON, WXJsonUtils.parseWson(((byte[]) object.data)));
-      }
       builder.append(WXJsonUtils.fromObjectToJSONString(object));
       builder.append(",");
     }
@@ -2050,7 +1605,6 @@ public void invokeDestoryInstance(String instanceId, String namespace, String fu
     return  builder.toString();
   }
 
-
   private void invokeInitFramework(Message msg) {
     String framework = "";
     if (msg.obj != null) {
@@ -2076,8 +1630,8 @@ public void invokeDestoryInstance(String instanceId, String namespace, String fu
       }
       if (TextUtils.isEmpty(framework)) {
         setJSFrameworkInit(false);
-		WXExceptionUtils.commitCriticalExceptionRT(null, WXErrorCode.WX_ERR_JS_FRAMEWORK,
-				"initFramework", "framework is empty!! ", null);
+        WXExceptionUtils.commitCriticalExceptionRT(null, WXErrorCode.WX_ERR_JS_FRAMEWORK,
+                "initFramework", "framework is empty!! ", null);
         return;
       }
       try {
@@ -2119,37 +1673,36 @@ public void invokeDestoryInstance(String instanceId, String namespace, String fu
           String reinitInfo = "";
           if (reInitCount > 1) {
             reinitInfo = "reinit Framework:";
-            // WXExceptionUtils.commitCriticalExceptionRT(null, WXErrorCode.WX_JS_FRAMEWORK_REINIT_SUCCESS,
-            //       "initFramework", reinitInfo + "success", null);
+//            WXExceptionUtils.commitCriticalExceptionRT(null, WXErrorCode.WX_JS_FRAMEWORK_REINIT_SUCCESS,
+//                    "initFramework", reinitInfo + "success", null);
           } else {
-            // WXExceptionUtils.commitCriticalExceptionRT(null, WXErrorCode.WX_JS_FRAMEWORK_INIT_SUCCESS.getErrorCode(),
-            //        "initFramework", reinitInfo + "success", null);
+//            WXExceptionUtils.commitCriticalExceptionRT(null, WXErrorCode.WX_JS_FRAMEWORK_INIT_SUCCESS,
+//                    "initFramework", reinitInfo + "success", null);
           }
-
         } else {
           if (reInitCount > 1) {
             WXLogUtils.e("[WXBridgeManager] invokeReInitFramework  ExecuteJavaScript fail");
             String err = "[WXBridgeManager] invokeReInitFramework  ExecuteJavaScript fail reinit FrameWork";
-			// WXExceptionUtils.commitCriticalExceptionRT(null, WXErrorCode.WX_ERR_JS_REINIT_FRAMEWORK,
-			//		"initFramework", "reInitCount = " + reInitCount + err, null);
+//            WXExceptionUtils.commitCriticalExceptionRT(null, WXErrorCode.WX_ERR_JS_FRAMEWORK,
+//                    "initFramework", "reInitCount = " + reInitCount + err, null);
           } else {
             WXLogUtils.e("[WXBridgeManager] invokeInitFramework  ExecuteJavaScript fail");
             String err = "[WXBridgeManager] invokeInitFramework  ExecuteJavaScript fail";
-			// WXExceptionUtils.commitCriticalExceptionRT(null, WXErrorCode.WX_ERR_JS_FRAMEWORK,
-			//		"initFramework", err, null);
+//            WXExceptionUtils.commitCriticalExceptionRT(null, WXErrorCode.WX_ERR_JS_FRAMEWORK,
+//                    "initFramework", err, null);
           }
         }
       } catch (Throwable e) {
         if (reInitCount > 1) {
           WXLogUtils.e("[WXBridgeManager] invokeInitFramework ", e);
           String err = "[WXBridgeManager] invokeInitFramework reinit FrameWork exception!#" + e.toString();
-		  WXExceptionUtils.commitCriticalExceptionRT(null, WXErrorCode.WX_ERR_JS_REINIT_FRAMEWORK,
-				  "initFramework", "reInitCount ==" + reInitCount + err, null);
+//          WXExceptionUtils.commitCriticalExceptionRT(null, WXErrorCode.WX_ERR_JS_FRAMEWORK,
+//                  "initFramework", "reInitCount ==" + reInitCount + err, null);
         } else {
           WXLogUtils.e("[WXBridgeManager] invokeInitFramework ", e);
           String err = "[WXBridgeManager] invokeInitFramework exception!#" + e.toString();
-		  WXExceptionUtils.commitCriticalExceptionRT(null, WXErrorCode.WX_ERR_JS_FRAMEWORK,
-				  "initFramework", err, null);
+//          WXExceptionUtils.commitCriticalExceptionRT(null, WXErrorCode.WX_ERR_JS_FRAMEWORK,
+//                  "initFramework", err, null);
         }
       }
 
@@ -2168,7 +1721,7 @@ public void invokeDestoryInstance(String instanceId, String namespace, String fu
     try {
       Object instanceId = message.obj;
 
-      ArrayList<WXHashMap<String, Object>> task = null;
+      Object task = null;
       Stack<String> instanceStack = mNextTickTasks.getInstanceStack();
       int size = instanceStack.size();
       for (int i = size - 1; i >= 0; i--) {
@@ -2178,23 +1731,20 @@ public void invokeDestoryInstance(String instanceId, String namespace, String fu
           break;
         }
       }
-      Object[] tasks = ((ArrayList) task).toArray();
+      task = ((ArrayList) task).toArray();
 
       WXJSObject[] args = {
-          new WXJSObject(WXJSObject.String, instanceId),
-          WXJsonUtils.wsonWXJSObject(tasks)};
+              new WXJSObject(WXJSObject.String, instanceId),
+              new WXJSObject(WXJSObject.JSON,
+                      WXJsonUtils.fromObjectToJSONString(task))};
 
       invokeExecJS(String.valueOf(instanceId), null, METHOD_CALL_JS, args);
-      task.clear();
-      for(int i=0; i<tasks.length; i++){
-        tasks[i] = null;
-      }
-      args = null;
+
     } catch (Throwable e) {
       WXLogUtils.e("WXBridgeManager", e);
       String err = "invokeCallJSBatch#" + WXLogUtils.getStackTrace(e);
-	  WXExceptionUtils.commitCriticalExceptionRT(null, WXErrorCode.WX_ERR_JS_FRAMEWORK,
-			  "invokeCallJSBatch", err, null);
+      WXExceptionUtils.commitCriticalExceptionRT(null, WXErrorCode.WX_ERR_JS_FRAMEWORK,
+              "invokeCallJSBatch", err, null);
     }
 
     // If task is not empty, loop until it is empty
@@ -2279,7 +1829,7 @@ public void invokeDestoryInstance(String instanceId, String namespace, String fu
         post(new Runnable() {
           @Override
           public void run() {
-			invokeRegisterModules(modules, mRegisterComponentFailList);
+            invokeRegisterModules(modules, mRegisterComponentFailList);
           }
         }, null);
       }
@@ -2291,7 +1841,7 @@ public void invokeDestoryInstance(String instanceId, String namespace, String fu
    */
   public void registerComponents(final List<Map<String, Object>> components) {
     if (mJSHandler == null || components == null
-        || components.size() == 0) {
+            || components.size() == 0) {
       return;
     }
     post(new Runnable() {
@@ -2322,17 +1872,17 @@ public void invokeDestoryInstance(String instanceId, String namespace, String fu
     } catch (Throwable e) {
       WXLogUtils.e("[WXBridgeManager] invokeRegisterService:", e);
 
-	  Map<String, String> data = new HashMap<String, String>();
-	  data.put("inputParams",service + "||" + receiver.toString());
+      Map<String, String> data = new HashMap<String, String>();
+      data.put("inputParams",service + "||" + receiver.toString());
 
-	  WXExceptionUtils.commitCriticalExceptionRT("invokeExecJSService",
-			  WXErrorCode.WX_KEY_EXCEPTION_INVOKE_JSSERVICE_EXECUTE,
-			  "invokeExecJSService",
-			  WXErrorCode.WX_KEY_EXCEPTION_INVOKE_JSSERVICE_EXECUTE.getErrorMsg()
-					  + "[WXBridgeManager] invokeRegisterService:"
-					  + WXLogUtils.getStackTrace(e),
-			  data);
-	}
+      WXExceptionUtils.commitCriticalExceptionRT("invokeExecJSService",
+              WXErrorCode.WX_KEY_EXCEPTION_INVOKE_JSSERVICE_EXECUTE,
+              "invokeExecJSService",
+              WXErrorCode.WX_KEY_EXCEPTION_INVOKE_JSSERVICE_EXECUTE.getErrorMsg()
+                      + "[WXBridgeManager] invokeRegisterService:"
+                      + WXLogUtils.getStackTrace(e),
+              data);
+    }
   }
 
   private boolean isJSThread() {
@@ -2349,7 +1899,7 @@ public void invokeDestoryInstance(String instanceId, String namespace, String fu
     }
 
     WXJSObject[] args = {new WXJSObject(WXJSObject.JSON,
-        WXJsonUtils.fromObjectToJSONString(modules))};
+            WXJsonUtils.fromObjectToJSONString(modules))};
     try {
       mWXBridge.execJS("", null, METHOD_REGISTER_MODULES, args);
       try {
@@ -2365,11 +1915,11 @@ public void invokeDestoryInstance(String instanceId, String namespace, String fu
       } catch (Throwable e) {
       }
     } catch (Throwable e) {
-	  WXExceptionUtils.commitCriticalExceptionRT(null,
-			  WXErrorCode.WX_KEY_EXCEPTION_INVOKE_REGISTER_MODULES,
-			  "invokeRegisterModules", WXErrorCode.WX_KEY_EXCEPTION_INVOKE_REGISTER_MODULES.getErrorMsg() +
-			  " \n " + e.getMessage() + modules.entrySet().toString(),
-			  null );
+      WXExceptionUtils.commitCriticalExceptionRT(null,
+              WXErrorCode.WX_KEY_EXCEPTION_INVOKE_REGISTER_MODULES,
+              "invokeRegisterModules", WXErrorCode.WX_KEY_EXCEPTION_INVOKE_REGISTER_MODULES.getErrorMsg() +
+                      " \n " + e.getMessage() + modules.entrySet().toString(),
+              null );
 
       WXLogUtils.e("[WXBridgeManager] invokeRegisterModules:", e);
     }
@@ -2392,18 +1942,18 @@ public void invokeDestoryInstance(String instanceId, String namespace, String fu
     }
 
     WXJSObject[] args = {new WXJSObject(WXJSObject.JSON,
-        WXJsonUtils.fromObjectToJSONString(components))};
+            WXJsonUtils.fromObjectToJSONString(components))};
     try {
       mWXBridge.execJS("", null, METHOD_REGISTER_COMPONENTS, args);
     } catch (Throwable e) {
       WXLogUtils.e("[WXBridgeManager] invokeRegisterComponents ", e);
-	  WXExceptionUtils.commitCriticalExceptionRT(null,
-			  WXErrorCode.WX_KEY_EXCEPTION_INVOKE_REGISTER_CONTENT_FAILED,
-			  METHOD_REGISTER_COMPONENTS,
-			  WXErrorCode.WX_KEY_EXCEPTION_INVOKE_REGISTER_CONTENT_FAILED.getErrorMsg()
-					  + args.toString()
-					  + WXLogUtils.getStackTrace(e),
-			  null);
+      WXExceptionUtils.commitCriticalExceptionRT(null,
+              WXErrorCode.WX_KEY_EXCEPTION_INVOKE_REGISTER_CONTENT_FAILED,
+              METHOD_REGISTER_COMPONENTS,
+              WXErrorCode.WX_KEY_EXCEPTION_INVOKE_REGISTER_CONTENT_FAILED
+                      + args.toString()
+                      + WXLogUtils.getStackTrace(e),
+              null);
     }
   }
 
@@ -2424,28 +1974,25 @@ public void invokeDestoryInstance(String instanceId, String namespace, String fu
   public void reportJSException(String instanceId, String function,
                                 String exception) {
     WXLogUtils.e("reportJSException >>>> instanceId:" + instanceId
-        + ", exception function:" + function + ", exception:"
-        + exception);
+            + ", exception function:" + function + ", exception:"
+            + exception);
     WXSDKInstance instance = null;
     if (instanceId != null && (instance = WXSDKManager.getInstance().getSDKInstance(instanceId)) != null) {
-	  exception +=   "\n getTemplateInfo==" +instance.getTemplateInfo();//add network header info
-      if (METHOD_CREATE_INSTANCE_CONTEXT.equals(function) || METHOD_CREATE_INSTANCE.equals(function) || !instance.isContentMd5Match()) {
+      exception +=   "\n getTemplateInfo==" +instance.getTemplateInfo();//add network header info
+      if (METHOD_CREATE_INSTANCE.equals(function)) {
         try {
           if (isJSFrameworkInit() && reInitCount > 1 && !instance.isNeedReLoad()) {
-            // JSONObject domObject = JSON.parseObject(tasks);
-            WXDomModule domModule = getDomModule(instanceId);
-            Action action = Actions.getReloadPage(instanceId, true);
-            domModule.postAction((DOMAction) action, true);
+            new ActionReloadPage(instanceId, true).executeAction();
             instance.setNeedLoad(true);
             return;
           } else {
             instance.onRenderError(//DegradPassivity to H5
-            		WXErrorCode.WX_DEGRAD_ERR_INSTANCE_CREATE_FAILED.getErrorCode(),
+                    WXErrorCode.WX_DEGRAD_ERR_INSTANCE_CREATE_FAILED.getErrorCode(),
                     WXErrorCode.WX_DEGRAD_ERR_INSTANCE_CREATE_FAILED.getErrorMsg() +
-							"reportJSException >>>> instanceId:" + instanceId
-							+ ", exception function:" + function + ", exception:"
-							+ exception
-			);
+                            "reportJSException >>>> instanceId:" + instanceId
+                            + ", exception function:" + function + ", exception:"
+                            + exception
+            );
             //doReportJSException(instanceId,function,exception);
             WXExceptionUtils.commitCriticalExceptionRT(instanceId,WXErrorCode.WX_RENDER_ERR_JS_CREATE_INSTANCE,function,exception,null);
             return;
@@ -2455,8 +2002,8 @@ public void invokeDestoryInstance(String instanceId, String namespace, String fu
         }
       }
       instance.onJSException(WXErrorCode.WX_ERR_JS_EXECUTE.getErrorCode(), function, exception);
-	}
-	doReportJSException(instanceId,function,exception);
+    }
+    doReportJSException(instanceId,function,exception);
   }
 
   private void doReportJSException(String instanceId, String function, String exception){
@@ -2508,20 +2055,20 @@ public void invokeDestoryInstance(String instanceId, String namespace, String fu
         }
       }
 
-     if (checkEmptyScreen(instance)){
+      if (checkEmptyScreen(instance)){
         if (WXEnvironment.isApkDebugable()){
           WXLogUtils.e("render error 4 js error !");
         }
-       WXExceptionUtils.commitCriticalExceptionRT(exceptionId, WXErrorCode.WX_RENDER_ERR_JS_RUNTIME,
-                                                  function,
-                                                  WXErrorCode.WX_RENDER_ERR_JS_RUNTIME.getErrorMsg() + exception,
-                                                  null);
-     } else {
-       WXExceptionUtils.commitCriticalExceptionRT(exceptionId, WXErrorCode.WX_KEY_EXCEPTION_WXBRIDGE,
-                                                  function,
-                                                  WXErrorCode.WX_KEY_EXCEPTION_WXBRIDGE.getErrorMsg() + exception,
-                                                  null);
-     }
+        WXExceptionUtils.commitCriticalExceptionRT(exceptionId, WXErrorCode.WX_RENDER_ERR_JS_RUNTIME,
+                function,
+                WXErrorCode.WX_RENDER_ERR_JS_RUNTIME.getErrorMsg() + exception,
+                null);
+      } else {
+        WXExceptionUtils.commitCriticalExceptionRT(exceptionId, WXErrorCode.WX_KEY_EXCEPTION_WXBRIDGE,
+                function,
+                WXErrorCode.WX_KEY_EXCEPTION_WXBRIDGE.getErrorMsg() + exception,
+                null);
+      }
     }
   }
 
@@ -2539,15 +2086,13 @@ public void invokeDestoryInstance(String instanceId, String namespace, String fu
       return true;
     }
 
-    if (rootView instanceof ViewGroup){
+    if (rootView instanceof ViewGroup) {
       return ((ViewGroup) rootView).getChildCount() > 0;
     }else {
       return false;
     }
   }
 
-
-
   private void registerDomModule() throws WXException {
     /** Tell Javascript Framework what methods you have. This is Required.**/
     Map<String, Object> domMap = new HashMap<>();
@@ -2565,7 +2110,7 @@ public void invokeDestoryInstance(String instanceId, String namespace, String fu
    * update js server global config, current support turn wson off
    * by pass wson_off
    * */
-  public static void  updateGlobalConfig(String config){
+  public static void  updateGlobalConfig(String config) {
     if(TextUtils.isEmpty(config)){
       config = "none";
     }
@@ -2579,21 +2124,16 @@ public void invokeDestoryInstance(String instanceId, String namespace, String fu
             if(mBridgeManager.isJSFrameworkInit()){
               if(mBridgeManager.mWXBridge instanceof WXBridge) {
                 final WXBridge bridge = (WXBridge) mBridgeManager.mWXBridge;
-                bridge.updateGlobalConfig(globalConfig);
+                bridge.nativeUpdateGlobalConfig(globalConfig);
               }
             }
           }
-          if(globalConfig.contains("wson_off")){
-            WXJsonUtils.USE_WSON = false;
-          }else{
-            WXJsonUtils.USE_WSON = true;
-          }
         }
       };
       if(mBridgeManager != null && mBridgeManager.isJSFrameworkInit()){
-         mBridgeManager.post(runnable);
+        mBridgeManager.post(runnable);
       }else{
-         runnable.run();
+        runnable.run();
       }
     }
   }
@@ -2635,6 +2175,469 @@ public void invokeDestoryInstance(String instanceId, String namespace, String fu
     public String instanceId;
   }
 
+  public int callCreateBody(String pageId, String componentType, String ref,
+                            HashMap<String, String> styles, HashMap<String, String> attributes, HashSet<String> events,
+                            float[] margins, float[] paddings, float[] borders) {
+    long start = System.currentTimeMillis();
+    if (TextUtils.isEmpty(pageId) || TextUtils.isEmpty(componentType) || TextUtils.isEmpty(ref)) {
+      // if (WXEnvironment.isApkDebugable()) {
+      WXLogUtils.d("[WXBridgeManager] callCreateBody: call CreateBody tasks is null");
+      // }
+      WXExceptionUtils.commitCriticalExceptionRT(pageId,
+              WXErrorCode.WX_KEY_EXCEPTION_INVOKE, "callCreateBody",
+              "tasks is empty, INSTANCE_RENDERING_ERROR will be set", null);
+
+      return IWXBridge.INSTANCE_RENDERING_ERROR;
+    }
+
+    if (WXEnvironment.isApkDebugable() && BRIDGE_LOG_SWITCH) {
+      mLodBuilder.append("[WXBridgeManager] callCreateBody >>>> pageId:").append(pageId)
+              .append(", componentType:").append(componentType).append(", ref:").append(ref)
+              .append(", styles:").append(styles)
+              .append(", attributes:").append(attributes)
+              .append(", events:").append(events);
+      WXLogUtils.d(mLodBuilder.substring(0));
+      mLodBuilder.setLength(0);
+    }
+
+    if (mDestroyedInstanceId != null && mDestroyedInstanceId.contains(pageId)) {
+      return IWXBridge.DESTROY_INSTANCE;
+    }
+
+    try {
+      if (WXSDKManager.getInstance().getSDKInstance(pageId) != null) {
+        final BasicGraphicAction action = new GraphicActionCreateBody(pageId, ref, componentType,
+                styles, attributes, events, margins, paddings, borders);
+        WXSDKManager.getInstance().getWXRenderManager().postGraphicAction(action.getPageId(), action);
+      }
+    } catch (Exception e) {
+      WXLogUtils.e("[WXBridgeManager] callCreateBody exception: ", e);
+      WXExceptionUtils.commitCriticalExceptionRT(pageId,
+              WXErrorCode.WX_KEY_EXCEPTION_INVOKE, "callCreateBody",
+              WXLogUtils.getStackTrace(e), null);
+    }
+
+    WXSDKManager.getInstance().getSDKInstance(pageId).callCreateBodyTime(System.currentTimeMillis() - start);
+    return IWXBridge.INSTANCE_RENDERING;
+  }
+
+  public int callAddElement(String pageId, String componentType, String ref, int index, String parentRef,
+                            HashMap<String, String> styles, HashMap<String, String> attributes, HashSet<String> events,
+                            float[] margins, float[] paddings, float[] borders) {
+    long start = System.currentTimeMillis();
+    if (TextUtils.isEmpty(pageId) || TextUtils.isEmpty(componentType) || TextUtils.isEmpty(ref)) {
+      WXLogUtils.d("[WXBridgeManager] callAddElement: call CreateBody tasks is null");
+      WXExceptionUtils.commitCriticalExceptionRT(pageId,
+              WXErrorCode.WX_KEY_EXCEPTION_INVOKE, "callAddElement",
+              "arguments is empty, INSTANCE_RENDERING_ERROR will be set", null);
+
+      return IWXBridge.INSTANCE_RENDERING_ERROR;
+    }
+
+    if (WXEnvironment.isApkDebugable() && BRIDGE_LOG_SWITCH) {
+      mLodBuilder.append("[WXBridgeManager] callAddElement >>>> pageId:").append(pageId)
+              .append(", componentType:").append(componentType).append(", ref:").append(ref).append(", index:").append(index)
+              .append(", parentRef:").append(parentRef)
+              .append(", styles:").append(styles)
+              .append(", attributes:").append(attributes)
+              .append(", events:").append(events);
+      WXLogUtils.d(mLodBuilder.substring(0));
+      mLodBuilder.setLength(0);
+    }
+
+    if (mDestroyedInstanceId != null && mDestroyedInstanceId.contains(pageId)) {
+      return IWXBridge.DESTROY_INSTANCE;
+    }
+
+    try {
+      if (WXSDKManager.getInstance().getSDKInstance(pageId) != null) {
+        final GraphicActionAddElement action = new GraphicActionAddElement(pageId, ref, componentType, parentRef, index,
+            styles, attributes, events, margins, paddings, borders);
+        WXSDKManager.getInstance().getSDKInstance(pageId).addInActiveAddElementAction(ref, action);
+      }
+    } catch (Exception e) {
+      WXLogUtils.e("[WXBridgeManager] callAddElement exception: ", e);
+      WXExceptionUtils.commitCriticalExceptionRT(pageId,
+              WXErrorCode.WX_KEY_EXCEPTION_INVOKE, "callAddElement",
+              WXLogUtils.getStackTrace(e), null);
+    }
+
+    WXSDKManager.getInstance().getSDKInstance(pageId).callAddElementTime(System.currentTimeMillis() - start);
+    return IWXBridge.INSTANCE_RENDERING;
+  }
+
+  public int callRemoveElement(String instanceId, String ref) {
+
+    if (WXEnvironment.isApkDebugable() && BRIDGE_LOG_SWITCH) {
+      mLodBuilder.append("[WXBridgeManager] callRemoveElement >>>> instanceId:").append(instanceId)
+              .append(", ref:").append(ref);
+      WXLogUtils.d(mLodBuilder.substring(0));
+      mLodBuilder.setLength(0);
+    }
+
+    if (mDestroyedInstanceId != null && mDestroyedInstanceId.contains(instanceId)) {
+      return IWXBridge.DESTROY_INSTANCE;
+    }
+
+    try {
+      WXSDKInstance instance = WXSDKManager.getInstance().getSDKInstance(instanceId);
+      if (instance != null) {
+        final BasicGraphicAction action = new GraphicActionRemoveElement(instanceId, ref);
+        if(instance.getInActiveAddElementAction(ref)!=null){
+          instance.removeInActiveAddElmentAction(ref);
+        }
+        else {
+          WXSDKManager.getInstance().getWXRenderManager()
+              .postGraphicAction(action.getPageId(), action);
+        }
+      }
+    } catch (Exception e) {
+      WXLogUtils.e("[WXBridgeManager] callRemoveElement exception: ", e);
+      WXExceptionUtils.commitCriticalExceptionRT(instanceId,
+              WXErrorCode.WX_KEY_EXCEPTION_INVOKE, "callRemoveElement",
+              WXLogUtils.getStackTrace(e), null);
+    }
+
+    return IWXBridge.INSTANCE_RENDERING;
+  }
+
+  public int callMoveElement(String instanceId, String ref, String parentref, int index) {
+
+    if (WXEnvironment.isApkDebugable() && BRIDGE_LOG_SWITCH) {
+      mLodBuilder.append("[WXBridgeManager] callMoveElement >>>> instanceId:").append(instanceId)
+              .append(", parentref:").append(p

<TRUNCATED>