You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@weex.apache.org by gu...@apache.org on 2017/10/23 08:10:40 UTC

[12/18] incubator-weex git commit: Revert: * [android] modify border-android.png

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/bdcc5356/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 3f0b6e3..a949e3b 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
@@ -19,9 +19,6 @@
 package com.taobao.weex.bridge;
 
 import android.content.Context;
-import android.content.pm.ApplicationInfo;
-import android.content.pm.PackageManager;
-import android.os.Build;
 import android.os.Handler;
 import android.os.Handler.Callback;
 import android.os.Looper;
@@ -85,26 +82,26 @@ import static com.taobao.weex.bridge.WXModuleManager.getDomModule;
 /**
  * Manager class for communication between JavaScript and Android.
  * <ol>
- * <li>
- * Handle Android to JavaScript call, can be one of the following
- * <ul>
- * <li>{@link #createInstance(String, String, Map, String)}</li>
- * <li>{@link #destroyInstance(String)}</li>
- * <li>{@link #refreshInstance(String, WXRefreshData)}</li>
- * <li>{@link #registerModules(Map)}</li>
- * <li>{@link #registerComponents(List)}</li>
- * <li>{@link #invokeCallJSBatch(Message)}</li>
- * </ul>
- * </li>
- * <li>
- * Handle JavaScript to Android call
- * </li>
- * <li>
- * Handle next tick of message.
- * </li>
+ *   <li>
+ *     Handle Android to JavaScript call, can be one of the following
+ *     <ul>
+ *       <li>{@link #createInstance(String, String, Map, String)}</li>
+ *       <li>{@link #destroyInstance(String)}</li>
+ *       <li>{@link #refreshInstance(String, WXRefreshData)}</li>
+ *       <li>{@link #registerModules(Map)}</li>
+ *       <li>{@link #registerComponents(List)}</li>
+ *       <li>{@link #invokeCallJSBatch(Message)}</li>
+ *     </ul>
+ *   </li>
+ *   <li>
+ *     Handle JavaScript to Android call
+ *   </li>
+ *   <li>
+ *     Handle next tick of message.
+ *   </li>
  * </ol>
  */
-public class WXBridgeManager implements Callback, BactchExecutor {
+public class WXBridgeManager implements Callback,BactchExecutor {
 
   public static final String METHOD_CREATE_INSTANCE = "createInstance";
   public static final String METHOD_DESTROY_INSTANCE = "destroyInstance";
@@ -130,28 +127,33 @@ public class WXBridgeManager implements Callback, BactchExecutor {
   public static final String KEY_PARAMS = "params";
   public static final String ARGS = "args";
   public static final String OPTIONS = "options";
-  public static final String INITLOGFILE = "/jsserver_start.log";
   private static final String NON_CALLBACK = "-1";
   private static final String UNDEFINED = "undefined";
+
   private static final int INIT_FRAMEWORK_OK = 1;
-  private static final int CRASHREINIT = 50;
-  static volatile WXBridgeManager mBridgeManager;
+
   private static long LOW_MEM_VALUE = 120;
+
+  static volatile WXBridgeManager mBridgeManager;
+
+  private static final int CRASHREINIT = 50;
   private static int reInitCount = 1;
+
   private static String crashUrl = null;
   private static long lastCrashTime = 0;
-  /**
-   * package
-   **/
-  Handler mJSHandler;
+  public static final String INITLOGFILE = "/jsserver_start.log";
+
+
   /**
    * next tick tasks, can set priority
    */
   private WXHashMap<String, ArrayList<WXHashMap<String, Object>>> mNextTickTasks = new WXHashMap<>();
+
   /**
    * JSThread
    */
   private WXThread mJSThread;
+  /** package **/ Handler mJSHandler;
   private IWXBridge mWXBridge;
   private IWXDebugProxy mWxDebugProxy;
 
@@ -159,13 +161,22 @@ public class WXBridgeManager implements Callback, BactchExecutor {
   /**
    * Whether JS Framework(main.js) has been initialized.
    */
-  private boolean mInit = false;
+  private boolean mInit =false;
+
+  private boolean isJSFrameworkInit(){
+    return mInit;
+  }
+
   private List<Map<String, Object>> mRegisterComponentFailList = new ArrayList<>(8);
   private List<Map<String, Object>> mRegisterModuleFailList = new ArrayList<>(8);
   private List<String> mRegisterServiceFailList = new ArrayList<>(8);
+
   private List<String> mDestroyedInstanceId = new ArrayList<>();
+
   private StringBuilder mLodBuilder = new StringBuilder(50);
+
   private Interceptor mInterceptor;
+
   private WXParams mInitParams;
 
   private WXBridgeManager() {
@@ -185,10 +196,6 @@ public class WXBridgeManager implements Callback, BactchExecutor {
     return mBridgeManager;
   }
 
-  private boolean isJSFrameworkInit() {
-    return mInit;
-  }
-
   private void initWXBridge(boolean remoteDebug) {
     if (remoteDebug && WXEnvironment.isApkDebugable()) {
       WXEnvironment.sDebugServerConnectable = true;
@@ -205,7 +212,7 @@ 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();
               }
@@ -233,36 +240,36 @@ public class WXBridgeManager implements Callback, BactchExecutor {
     }
   }
 
-  public Object callModuleMethod(String instanceId, String moduleStr, String methodStr, JSONArray args) {
-    return callModuleMethod(instanceId, moduleStr, methodStr, args, null);
+    public Object callModuleMethod(String instanceId, String moduleStr, String methodStr, JSONArray args) {
+      return  callModuleMethod(instanceId, moduleStr, methodStr, args, null);
   }
 
-  public Object callModuleMethod(String instanceId, String moduleStr, String methodStr, JSONArray args, JSONObject options) {
-    WXSDKInstance wxsdkInstance = WXSDKManager.getInstance()
-        .getSDKInstance(instanceId);
-    if (wxsdkInstance == null) {
-      return null;
-    }
-    if (wxsdkInstance.isNeedValidate()
-        && WXSDKManager.getInstance().getValidateProcessor() != null) {
-      WXValidateProcessor.WXModuleValidateResult validateResult = WXSDKManager
-          .getInstance().getValidateProcessor()
-          .onModuleValidate(wxsdkInstance, moduleStr, methodStr, args, options);
-      if (validateResult == null) {
+    public Object callModuleMethod(String instanceId, String moduleStr, String methodStr, JSONArray args, JSONObject options) {
+      WXSDKInstance wxsdkInstance = WXSDKManager.getInstance()
+              .getSDKInstance(instanceId);
+      if (wxsdkInstance == null) {
         return null;
       }
-      if (validateResult.isSuccess) {
-        return WXModuleManager.callModuleMethod(instanceId, moduleStr, methodStr,
-            args);
-      } else {
-        JSONObject validateInfo = validateResult.validateInfo;
-        if (validateInfo != null) {
-          WXLogUtils.e("[WXBridgeManager] module validate fail. >>> " + validateInfo.toJSONString());
-        }
-        return validateInfo;
+      if (wxsdkInstance.isNeedValidate()
+              && WXSDKManager.getInstance().getValidateProcessor() != null) {
+          WXValidateProcessor.WXModuleValidateResult validateResult = WXSDKManager
+                  .getInstance().getValidateProcessor()
+                  .onModuleValidate(wxsdkInstance, moduleStr, methodStr, args, options);
+          if (validateResult == null) {
+              return null;
+          }
+          if (validateResult.isSuccess) {
+              return WXModuleManager.callModuleMethod(instanceId, moduleStr, methodStr,
+                      args);
+          } else {
+              JSONObject validateInfo = validateResult.validateInfo;
+            if (validateInfo != null) {
+              WXLogUtils.e("[WXBridgeManager] module validate fail. >>> " + validateInfo.toJSONString());
+            }
+              return validateInfo;
+          }
       }
-    }
-    return WXModuleManager.callModuleMethod(instanceId, moduleStr, methodStr, args);
+      return WXModuleManager.callModuleMethod(instanceId, moduleStr, methodStr, args);
   }
 
   /**
@@ -275,7 +282,6 @@ public class WXBridgeManager implements Callback, BactchExecutor {
 
   /**
    * Set current Instance
-   *
    * @param instanceId {@link WXSDKInstance#mInstanceId}
    */
   public synchronized void setStackTopInstance(final String instanceId) {
@@ -289,12 +295,12 @@ public class WXBridgeManager implements Callback, BactchExecutor {
   }
 
   @Override
-  public void post(Runnable r) {
-    if (mInterceptor != null && mInterceptor.take(r)) {
+  public void post(Runnable r){
+    if(mInterceptor != null && mInterceptor.take(r)){
       //task is token by the interceptor
       return;
     }
-    if (mJSHandler == null) {
+    if (mJSHandler == null){
       return;
     }
 
@@ -327,15 +333,15 @@ public class WXBridgeManager implements Callback, BactchExecutor {
     mJSHandler.sendMessageDelayed(message, timerInfo.time);
   }
 
-  public void sendMessageDelayed(Message message, long delayMillis) {
+  public void sendMessageDelayed(Message message, long delayMillis){
     if (message == null || mJSHandler == null || mJSThread == null
         || !mJSThread.isWXThreadAlive() || mJSThread.getLooper() == null) {
       return;
     }
-    mJSHandler.sendMessageDelayed(message, delayMillis);
+    mJSHandler.sendMessageDelayed(message,delayMillis);
   }
 
-  public void removeMessage(int what, Object obj) {
+  public void removeMessage(int what,Object obj){
     if (mJSHandler == null || mJSThread == null
         || !mJSThread.isWXThreadAlive() || mJSThread.getLooper() == null) {
       return;
@@ -343,97 +349,98 @@ public class WXBridgeManager implements Callback, BactchExecutor {
     mJSHandler.removeMessages(what, obj);
   }
 
-  public Object callNativeModule(String instanceId, String module, String method, JSONArray arguments, Object options) {
+    public Object callNativeModule(String instanceId, String module, String method, JSONArray arguments, Object options) {
 
-    if (WXEnvironment.isApkDebugable()) {
-      mLodBuilder.append("[WXBridgeManager] callNativeModule >>>> instanceId:").append(instanceId)
-          .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);
-        return dom.callDomMethod(method, arguments);
-      } else {
-        return callModuleMethod(instanceId, module,
-            method, arguments);
-      }
-    } catch (Exception e) {
-      WXLogUtils.e("[WXBridgeManager] callNative exception: ", e);
-      commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_ERR_INVOKE_NATIVE, "[WXBridgeManager] callNativeModule exception " + e.getCause());
-    }
-
-    return null;
-  }
+        if (WXEnvironment.isApkDebugable()) {
+            mLodBuilder.append("[WXBridgeManager] callNativeModule >>>> instanceId:").append(instanceId)
+                    .append(", module:").append(module).append(", method:").append(method).append(", arguments:").append(arguments);
+            WXLogUtils.d(mLodBuilder.substring(0));
+            mLodBuilder.setLength(0);
+        }
 
-  public Object callNativeModule(String instanceId, String module, String method, JSONArray arguments, JSONObject options) {
+        try {
+            if(WXDomModule.WXDOM.equals(module)){
+              WXDomModule dom = getDomModule(instanceId);
+              return dom.callDomMethod(method,arguments);
+            }else {
+              return callModuleMethod(instanceId, module,
+                      method, arguments);
+            }
+        } catch (Exception e) {
+            WXLogUtils.e("[WXBridgeManager] callNative exception: ", e);
+            commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_ERR_INVOKE_NATIVE, "[WXBridgeManager] callNativeModule exception " + e.getCause());
+        }
 
-    if (WXEnvironment.isApkDebugable()) {
-      mLodBuilder.append("[WXBridgeManager] callNativeModule >>>> instanceId:").append(instanceId)
-          .append(", module:").append(module).append(", method:").append(method).append(", arguments:").append(arguments);
-      WXLogUtils.d(mLodBuilder.substring(0));
-      mLodBuilder.setLength(0);
+        return null;
     }
+    public Object callNativeModule(String instanceId, String module,String method, JSONArray arguments, JSONObject options) {
 
-    try {
-      if (WXDomModule.WXDOM.equals(module)) {
-        WXDomModule dom = getDomModule(instanceId);
-        return dom.callDomMethod(method, arguments);
-      } else {
-        return callModuleMethod(instanceId, module,
-            method, arguments, options);
-      }
-    } catch (Exception e) {
-      WXLogUtils.e("[WXBridgeManager] callNative exception: ", e);
-      commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_ERR_INVOKE_NATIVE, "[WXBridgeManager] callNativeModule exception " + e.getCause());
-    }
+        if (WXEnvironment.isApkDebugable()) {
+            mLodBuilder.append("[WXBridgeManager] callNativeModule >>>> instanceId:").append(instanceId)
+                    .append(", module:").append(module).append(", method:").append(method).append(", arguments:").append(arguments);
+            WXLogUtils.d(mLodBuilder.substring(0));
+            mLodBuilder.setLength(0);
+        }
 
-    return null;
-  }
+        try {
+            if(WXDomModule.WXDOM.equals(module)){
+              WXDomModule dom = getDomModule(instanceId);
+              return dom.callDomMethod(method,arguments);
+            }else {
+              return callModuleMethod(instanceId, module,
+                      method, arguments, options);
+            }
+        } catch (Exception e) {
+            WXLogUtils.e("[WXBridgeManager] callNative exception: ", e);
+            commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_ERR_INVOKE_NATIVE, "[WXBridgeManager] callNativeModule exception " + e.getCause());
+        }
 
-  public Object callNativeComponent(String instanceId, String componentRef, String method, JSONArray arguments, Object options) {
-    if (WXEnvironment.isApkDebugable()) {
-      mLodBuilder.append("[WXBridgeManager] callNativeComponent >>>> instanceId:").append(instanceId)
-          .append(", componentRef:").append(componentRef).append(", method:").append(method).append(", arguments:").append(arguments);
-      WXLogUtils.d(mLodBuilder.substring(0));
-      mLodBuilder.setLength(0);
+        return null;
     }
-    try {
 
-      WXDomModule dom = getDomModule(instanceId);
-      dom.invokeMethod(componentRef, method, arguments);
+    public Object callNativeComponent(String instanceId, String componentRef, String method, JSONArray arguments, Object options) {
+        if (WXEnvironment.isApkDebugable()) {
+            mLodBuilder.append("[WXBridgeManager] callNativeComponent >>>> instanceId:").append(instanceId)
+                    .append(", componentRef:").append(componentRef).append(", method:").append(method).append(", arguments:").append(arguments);
+            WXLogUtils.d(mLodBuilder.substring(0));
+            mLodBuilder.setLength(0);
+        }
+        try {
 
-    } catch (Exception e) {
-      WXLogUtils.e("[WXBridgeManager] callNative exception: ", e);
-      commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_ERR_INVOKE_NATIVE, "[WXBridgeManager] callNativeModule exception " + e.getCause());
+            WXDomModule dom = getDomModule(instanceId);
+            dom.invokeMethod(componentRef, method, arguments);
+
+        } catch (Exception e) {
+            WXLogUtils.e("[WXBridgeManager] callNative exception: ", e);
+            commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_ERR_INVOKE_NATIVE, "[WXBridgeManager] callNativeModule exception " + e.getCause());
+        }
+        return null;
     }
-    return null;
-  }
 
   /**
    * Dispatch the native task to be executed.
-   *
+     *
    * @param instanceId {@link WXSDKInstance#mInstanceId}
-   * @param tasks      tasks to be executed
-   * @param callback   next tick id
+   * @param tasks tasks to be executed
+   * @param callback next tick id
    */
   public int callNative(String instanceId, String tasks, String callback) {
     if (TextUtils.isEmpty(tasks)) {
-      WXLogUtils.e("[WXBridgeManager] callNative: call Native tasks is null");
-      commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_ERR_INVOKE_NATIVE, "[WXBridgeManager] callNative: call Native tasks is null");
+      if (WXEnvironment.isApkDebugable()) {
+        WXLogUtils.e("[WXBridgeManager] callNative: call Native tasks is null");
+      }
+      commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_ERR_INVOKE_NATIVE,"[WXBridgeManager] callNative: call Native tasks is null");
       return IWXBridge.INSTANCE_RENDERING_ERROR;
     }
 
     // if (WXEnvironment.isApkDebugable()) {
-    mLodBuilder.append("[WXBridgeManager] callNative >>>> instanceId:").append(instanceId)
-        .append(", tasks:").append(tasks).append(", callback:").append(callback);
-    WXLogUtils.d(mLodBuilder.substring(0));
-    mLodBuilder.setLength(0);
+      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)) {
+    if(mDestroyedInstanceId!=null &&mDestroyedInstanceId.contains(instanceId)){
       return IWXBridge.DESTROY_INSTANCE;
     }
 
@@ -443,7 +450,7 @@ public class WXBridgeManager implements Callback, BactchExecutor {
     JSONArray array = JSON.parseArray(tasks);
     parseNanos = System.nanoTime() - parseNanos;
 
-    if (WXSDKManager.getInstance().getSDKInstance(instanceId) != null) {
+    if(WXSDKManager.getInstance().getSDKInstance(instanceId)!=null) {
       WXSDKManager.getInstance().getSDKInstance(instanceId).jsonParseTime(System.currentTimeMillis() - start);
     }
 
@@ -455,27 +462,27 @@ public class WXBridgeManager implements Callback, BactchExecutor {
           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)) {
+            if(target != null){
+              if(WXDomModule.WXDOM.equals(target)){
                 WXDomModule dom = getDomModule(instanceId);
-                dom.callDomMethod(task, parseNanos);
-              } else {
+                dom.callDomMethod(task,parseNanos);
+              }else {
                 JSONObject optionObj = task.getJSONObject(OPTIONS);
                 callModuleMethod(instanceId, (String) target,
-                    (String) task.get(METHOD), (JSONArray) task.get(ARGS), optionObj);
+                        (String) task.get(METHOD), (JSONArray) task.get(ARGS), optionObj);
               }
-            } else if (task.get(COMPONENT) != null) {
+            }else if(task.get(COMPONENT) != null){
               //call component
               WXDomModule dom = getDomModule(instanceId);
-              dom.invokeMethod((String) task.get(REF), (String) task.get(METHOD), (JSONArray) task.get(ARGS));
-            } else {
+              dom.invokeMethod((String) task.get(REF),(String) task.get(METHOD),(JSONArray) task.get(ARGS));
+            }else{
               throw new IllegalArgumentException("unknown callNative");
             }
           }
         }
       } catch (Exception e) {
         WXLogUtils.e("[WXBridgeManager] callNative exception: ", e);
-        commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_ERR_INVOKE_NATIVE, "[WXBridgeManager] callNative exception " + e.getCause());
+        commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_ERR_INVOKE_NATIVE,"[WXBridgeManager] callNative exception "+e.getCause());
       }
     }
 
@@ -491,21 +498,21 @@ public class WXBridgeManager implements Callback, BactchExecutor {
   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");
+        WXLogUtils.d("[WXBridgeManager] callCreateBody: call CreateBody tasks is null");
       // }
-      commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_ERR_DOM_CREATEBODY, "[WXBridgeManager] callCreateBody: call CreateBody tasks is null");
+      commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_ERR_DOM_CREATEBODY,"[WXBridgeManager] callCreateBody: call CreateBody tasks is null");
       return IWXBridge.INSTANCE_RENDERING_ERROR;
     }
 
     // if (WXEnvironment.isApkDebugable()) {
-    mLodBuilder.append("[WXBridgeManager] callCreateBody >>>> instanceId:").append(instanceId)
-        .append(", tasks:").append(tasks).append(", callback:").append(callback);
-    WXLogUtils.d(mLodBuilder.substring(0));
-    mLodBuilder.setLength(0);
+      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)) {
+    if(mDestroyedInstanceId != null && mDestroyedInstanceId.contains(instanceId)){
       return IWXBridge.DESTROY_INSTANCE;
     }
 
@@ -518,7 +525,7 @@ public class WXBridgeManager implements Callback, BactchExecutor {
 
         WXDomModule domModule = getDomModule(instanceId);
         Action action = Actions.getCreateBody(domObject);
-        domModule.postAction((DOMAction) action, true);
+        domModule.postAction((DOMAction)action, true);
 
         if (WXTracing.isAvailable() && action instanceof TraceableAction) {
           ((TraceableAction) action).mParseJsonNanos = nanosTemp;
@@ -527,8 +534,8 @@ public class WXBridgeManager implements Callback, BactchExecutor {
         }
       }
     } catch (Exception e) {
-      WXLogUtils.e("[WXBridgeManager] callCreateBody exception: ", e);
-      commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_ERR_DOM_CREATEBODY, "[WXBridgeManager] callCreateBody exception " + e.getCause());
+        WXLogUtils.e("[WXBridgeManager] callCreateBody exception: ", e);
+        commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_ERR_DOM_CREATEBODY,"[WXBridgeManager] callCreateBody exception "+e.getCause());
     }
 
     if (UNDEFINED.equals(callback) || NON_CALLBACK.equals(callback)) {
@@ -544,12 +551,12 @@ public class WXBridgeManager implements Callback, BactchExecutor {
   public int callUpdateFinish(String instanceId, String callback) {
     if (WXEnvironment.isApkDebugable()) {
       mLodBuilder.append("[WXBridgeManager] callUpdateFinish >>>> instanceId:").append(instanceId)
-          .append(", callback:").append(callback);
+              .append(", callback:").append(callback);
       WXLogUtils.d(mLodBuilder.substring(0));
       mLodBuilder.setLength(0);
     }
 
-    if (mDestroyedInstanceId != null && mDestroyedInstanceId.contains(instanceId)) {
+    if(mDestroyedInstanceId != null && mDestroyedInstanceId.contains(instanceId)){
       return IWXBridge.DESTROY_INSTANCE;
     }
 
@@ -557,11 +564,11 @@ public class WXBridgeManager implements Callback, BactchExecutor {
       if (WXSDKManager.getInstance().getSDKInstance(instanceId) != null) {
         WXDomModule domModule = getDomModule(instanceId);
         Action action = Actions.getUpdateFinish();
-        domModule.postAction((DOMAction) action, false);
+        domModule.postAction((DOMAction)action, false);
       }
     } catch (Exception e) {
       WXLogUtils.e("[WXBridgeManager] callUpdateFinish exception: ", e);
-      commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_ERR_INVOKE_NATIVE, "[WXBridgeManager] callUpdateFinish exception " + e.getCause());
+      commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_ERR_INVOKE_NATIVE,"[WXBridgeManager] callUpdateFinish exception "+e.getCause());
     }
 
     if (UNDEFINED.equals(callback) || NON_CALLBACK.equals(callback)) {
@@ -575,13 +582,13 @@ public class WXBridgeManager implements Callback, BactchExecutor {
   // callCreateFinish
   public int callCreateFinish(String instanceId, String callback) {
     // if (WXEnvironment.isApkDebugable()) {
-    mLodBuilder.append("[WXBridgeManager] callCreateFinish >>>> instanceId:").append(instanceId)
-        .append(", callback:").append(callback);
-    WXLogUtils.d(mLodBuilder.substring(0));
-    mLodBuilder.setLength(0);
+      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)) {
+    if(mDestroyedInstanceId != null && mDestroyedInstanceId.contains(instanceId)) {
       return IWXBridge.DESTROY_INSTANCE;
     }
 
@@ -589,11 +596,11 @@ public class WXBridgeManager implements Callback, BactchExecutor {
       if (WXSDKManager.getInstance().getSDKInstance(instanceId) != null) {
         WXDomModule domModule = getDomModule(instanceId);
         Action action = Actions.getCreateFinish();
-        domModule.postAction((DOMAction) action, false);
+        domModule.postAction((DOMAction)action, false);
       }
     } catch (Exception e) {
       WXLogUtils.e("[WXBridgeManager] callCreateFinish exception: ", e);
-      commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_ERROR_DOM_CREATEFINISH, "[WXBridgeManager] callCreateFinish exception " + e.getCause());
+      commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_ERROR_DOM_CREATEFINISH,"[WXBridgeManager] callCreateFinish exception " + e.getCause());
     }
 
     if (UNDEFINED.equals(callback) || NON_CALLBACK.equals(callback)) {
@@ -609,12 +616,12 @@ public class WXBridgeManager implements Callback, BactchExecutor {
   public int callRefreshFinish(String instanceId, String callback) {
     if (WXEnvironment.isApkDebugable()) {
       mLodBuilder.append("[WXBridgeManager] callRefreshFinish >>>> instanceId:").append(instanceId)
-          .append(", callback:").append(callback);
+              .append(", callback:").append(callback);
       WXLogUtils.d(mLodBuilder.substring(0));
       mLodBuilder.setLength(0);
     }
 
-    if (mDestroyedInstanceId != null && mDestroyedInstanceId.contains(instanceId)) {
+    if(mDestroyedInstanceId != null && mDestroyedInstanceId.contains(instanceId)) {
       return IWXBridge.DESTROY_INSTANCE;
     }
 
@@ -622,11 +629,11 @@ public class WXBridgeManager implements Callback, BactchExecutor {
       if (WXSDKManager.getInstance().getSDKInstance(instanceId) != null) {
         WXDomModule domModule = getDomModule(instanceId);
         Action action = Actions.getRefreshFinish();
-        domModule.postAction((DOMAction) action, false);
+        domModule.postAction((DOMAction)action, false);
       }
     } catch (Exception e) {
       WXLogUtils.e("[WXBridgeManager] callRefreshFinish exception: ", e);
-      commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_ERROR_DOM_REFRESHFINISH, "[WXBridgeManager] callRefreshFinish exception " + e.getCause());
+      commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_ERROR_DOM_REFRESHFINISH,"[WXBridgeManager] callRefreshFinish exception " + e.getCause());
     }
 
     if (UNDEFINED.equals(callback) || NON_CALLBACK.equals(callback)) {
@@ -641,20 +648,22 @@ 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");
-      commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_ERR_DOM_UPDATEATTRS, "[WXBridgeManager] callUpdateAttrs: call UpdateAttrs tasks is null");
+      if (WXEnvironment.isApkDebugable()) {
+        WXLogUtils.e("[WXBridgeManager] callUpdateAttrs: call UpdateAttrs tasks is null");
+      }
+      commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_ERR_DOM_UPDATEATTRS,"[WXBridgeManager] callUpdateAttrs: call UpdateAttrs tasks is null");
       return IWXBridge.INSTANCE_RENDERING_ERROR;
     }
     if (WXEnvironment.isApkDebugable()) {
       mLodBuilder.append("[WXBridgeManager] callUpdateAttrs >>>> instanceId:").append(instanceId)
-          .append(", ref:").append(ref)
-          .append(", task:").append(task)
-          .append(", callback:").append(callback);
+              .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)) {
+    if(mDestroyedInstanceId != null && mDestroyedInstanceId.contains(instanceId)) {
       return IWXBridge.DESTROY_INSTANCE;
     }
 
@@ -667,7 +676,7 @@ public class WXBridgeManager implements Callback, BactchExecutor {
         parseNanos = System.nanoTime() - parseNanos;
 
         Action action = Actions.getUpdateAttrs(ref, domObject);
-        domModule.postAction((DOMAction) action, false);
+        domModule.postAction((DOMAction)action, false);
 
         if (WXTracing.isAvailable() && action instanceof TraceableAction) {
           ((TraceableAction) action).mStartMillis = start;
@@ -677,7 +686,7 @@ public class WXBridgeManager implements Callback, BactchExecutor {
       }
     } catch (Exception e) {
       WXLogUtils.e("[WXBridgeManager] callUpdateAttrs exception: ", e);
-      commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_ERR_DOM_UPDATEATTRS, "[WXBridgeManager] callUpdateAttrs exception " + e.getCause());
+      commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_ERR_DOM_UPDATEATTRS,"[WXBridgeManager] callUpdateAttrs exception " + e.getCause());
     }
 
     if (UNDEFINED.equals(callback) || NON_CALLBACK.equals(callback)) {
@@ -692,20 +701,22 @@ public class WXBridgeManager implements Callback, BactchExecutor {
   // 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");
-      commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_ERR_DOM_UPDATESTYLE, "[WXBridgeManager] callUpdateStyle: call UpdateStyle tasks is null");
+      if (WXEnvironment.isApkDebugable()) {
+        WXLogUtils.e("[WXBridgeManager] callUpdateStyle: call UpdateStyle tasks is null");
+      }
+      commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_ERR_DOM_UPDATESTYLE,"[WXBridgeManager] callUpdateStyle: call UpdateStyle tasks is null");
       return IWXBridge.INSTANCE_RENDERING_ERROR;
     }
-   if (WXEnvironment.isApkDebugable()) {
-    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);
-    }
+//    if (WXEnvironment.isApkDebugable()) {
+      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);
+//    }
 
-    if (mDestroyedInstanceId != null && mDestroyedInstanceId.contains(instanceId)) {
+    if(mDestroyedInstanceId != null && mDestroyedInstanceId.contains(instanceId)) {
       return IWXBridge.DESTROY_INSTANCE;
     }
 
@@ -718,7 +729,7 @@ public class WXBridgeManager implements Callback, BactchExecutor {
         nanosTemp = System.nanoTime() - nanosTemp;
 
         Action action = Actions.getUpdateStyle(ref, domObject, false);
-        domModule.postAction((DOMAction) action, false);
+        domModule.postAction((DOMAction)action, false);
 
         if (WXTracing.isAvailable() && action instanceof TraceableAction) {
           ((TraceableAction) action).mParseJsonNanos = nanosTemp;
@@ -728,7 +739,7 @@ public class WXBridgeManager implements Callback, BactchExecutor {
       }
     } catch (Exception e) {
       WXLogUtils.e("[WXBridgeManager] callUpdateStyle exception: ", e);
-      commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_ERR_DOM_UPDATESTYLE, "[WXBridgeManager] callUpdateStyle exception " + e.getCause());
+      commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_ERR_DOM_UPDATESTYLE,"[WXBridgeManager] callUpdateStyle exception " + e.getCause());
     }
 
     if (UNDEFINED.equals(callback) || NON_CALLBACK.equals(callback)) {
@@ -744,12 +755,12 @@ public class WXBridgeManager implements Callback, BactchExecutor {
 
     if (WXEnvironment.isApkDebugable()) {
       mLodBuilder.append("[WXBridgeManager] callRemoveElement >>>> instanceId:").append(instanceId)
-          .append(", ref:").append(ref);
+              .append(", ref:").append(ref);
       WXLogUtils.d(mLodBuilder.substring(0));
       mLodBuilder.setLength(0);
     }
 
-    if (mDestroyedInstanceId != null && mDestroyedInstanceId.contains(instanceId)) {
+    if(mDestroyedInstanceId != null && mDestroyedInstanceId.contains(instanceId)) {
       return IWXBridge.DESTROY_INSTANCE;
     }
 
@@ -757,7 +768,7 @@ public class WXBridgeManager implements Callback, BactchExecutor {
       if (WXSDKManager.getInstance().getSDKInstance(instanceId) != null) {
         WXDomModule domModule = getDomModule(instanceId);
         Action action = Actions.getRemoveElement(ref);
-        domModule.postAction((DOMAction) action, false);
+        domModule.postAction((DOMAction)action, false);
 
         if (WXTracing.isAvailable() && action instanceof TraceableAction) {
           ((TraceableAction) action).onStartDomExecute(instanceId, "removeElement", ref, null, ref);
@@ -765,7 +776,7 @@ public class WXBridgeManager implements Callback, BactchExecutor {
       }
     } catch (Exception e) {
       WXLogUtils.e("[WXBridgeManager] callRemoveElement exception: ", e);
-      commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_ERR_DOM_REMOVEELEMENT, "[WXBridgeManager] callRemoveElement exception " + e.getCause());
+      commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_ERR_DOM_REMOVEELEMENT,"[WXBridgeManager] callRemoveElement exception " + e.getCause());
     }
 
     if (UNDEFINED.equals(callback) || NON_CALLBACK.equals(callback)) {
@@ -781,14 +792,14 @@ public class WXBridgeManager implements Callback, BactchExecutor {
 
     if (WXEnvironment.isApkDebugable()) {
       mLodBuilder.append("[WXBridgeManager] callMoveElement >>>> instanceId:").append(instanceId)
-          .append(", parentref:").append(parentref)
-          .append(", index:").append(index)
-          .append(", ref:").append(ref);
+              .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)) {
+    if(mDestroyedInstanceId != null && mDestroyedInstanceId.contains(instanceId)) {
       return IWXBridge.DESTROY_INSTANCE;
     }
 
@@ -796,11 +807,11 @@ public class WXBridgeManager implements Callback, BactchExecutor {
       if (WXSDKManager.getInstance().getSDKInstance(instanceId) != null) {
         WXDomModule domModule = getDomModule(instanceId);
         Action action = Actions.getMoveElement(ref, parentref, Integer.parseInt(index));
-        domModule.postAction((DOMAction) action, false);
+        domModule.postAction((DOMAction)action, false);
       }
     } catch (Exception e) {
       WXLogUtils.e("[WXBridgeManager] callMoveElement exception: ", e);
-      commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_ERR_DOM_MOVEELEMENT, "[WXBridgeManager] callMoveElement exception " + e.getCause());
+      commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_ERR_DOM_MOVEELEMENT,"[WXBridgeManager] callMoveElement exception " + e.getCause());
     }
 
     if (UNDEFINED.equals(callback) || NON_CALLBACK.equals(callback)) {
@@ -814,14 +825,14 @@ public class WXBridgeManager implements Callback, BactchExecutor {
   public int callAddEvent(String instanceId, String ref, String event, String callback) {
 
 //    if (WXEnvironment.isApkDebugable()) {
-    mLodBuilder.append("[WXBridgeManager] callAddEvent >>>> instanceId:").append(instanceId)
-        .append(", ref:").append(ref)
-        .append(", event:").append(event);
-    WXLogUtils.d(mLodBuilder.substring(0));
-    mLodBuilder.setLength(0);
+      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)) {
+    if(mDestroyedInstanceId != null && mDestroyedInstanceId.contains(instanceId)) {
       return IWXBridge.DESTROY_INSTANCE;
     }
 
@@ -829,7 +840,7 @@ public class WXBridgeManager implements Callback, BactchExecutor {
       if (WXSDKManager.getInstance().getSDKInstance(instanceId) != null) {
         WXDomModule domModule = getDomModule(instanceId);
         Action action = Actions.getAddEvent(ref, event);
-        domModule.postAction((DOMAction) action, false);
+        domModule.postAction((DOMAction)action, false);
 
         if (WXTracing.isAvailable() && action instanceof TraceableAction) {
           ((TraceableAction) action).onStartDomExecute(instanceId, "addEvent", ref, null, event);
@@ -837,7 +848,7 @@ public class WXBridgeManager implements Callback, BactchExecutor {
       }
     } catch (Exception e) {
       WXLogUtils.e("[WXBridgeManager] callAddEvent exception: ", e);
-      commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_ERR_DOM_ADDEVENT, "[WXBridgeManager] callAddEvent exception " + e.getCause());
+      commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_ERR_DOM_ADDEVENT,"[WXBridgeManager] callAddEvent exception " + e.getCause());
     }
 
     if (UNDEFINED.equals(callback) || NON_CALLBACK.equals(callback)) {
@@ -852,21 +863,21 @@ public class WXBridgeManager implements Callback, BactchExecutor {
 
     if (WXEnvironment.isApkDebugable()) {
       mLodBuilder.append("[WXBridgeManager] callRemoveEvent >>>> instanceId:").append(instanceId)
-          .append(", ref:").append(ref)
-          .append(", event:").append(event);
+              .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;
+    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);
+        domModule.postAction((DOMAction)action, false);
 
         if (WXTracing.isAvailable() && action instanceof TraceableAction) {
           ((TraceableAction) action).onStartDomExecute(instanceId, "removeEvent", ref, null, event);
@@ -874,7 +885,7 @@ public class WXBridgeManager implements Callback, BactchExecutor {
       }
     } catch (Exception e) {
       WXLogUtils.e("[WXBridgeManager] callRemoveEvent exception: ", e);
-      commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_ERR_DOM_REMOVEEVENT, "[WXBridgeManager] callRemoveEvent exception " + e.getCause());
+      commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_ERR_DOM_REMOVEEVENT,"[WXBridgeManager] callRemoveEvent exception " + e.getCause());
     }
 
     if (UNDEFINED.equals(callback) || NON_CALLBACK.equals(callback)) {
@@ -885,16 +896,16 @@ public class WXBridgeManager implements Callback, BactchExecutor {
     return IWXBridge.INSTANCE_RENDERING;
   }
 
-  public int callAddElement(String instanceId, String ref, String dom, String index, String callback) {
+  public int callAddElement(String instanceId, String ref,String dom,String index, String callback){
 
     if (WXEnvironment.isApkDebugable()) {
       mLodBuilder.append("[WXBridgeManager] callNative::callAddElement >>>> instanceId:").append(instanceId)
-          .append(", ref:").append(ref).append(", dom:").append(dom).append(", callback:").append(callback);
+              .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)) {
+    if(mDestroyedInstanceId!=null && mDestroyedInstanceId.contains(instanceId)){
       return IWXBridge.DESTROY_INSTANCE;
     }
 
@@ -909,7 +920,7 @@ public class WXBridgeManager implements Callback, BactchExecutor {
         WXSDKManager.getInstance().getSDKInstance(instanceId).jsonParseTime(System.currentTimeMillis() - start);
       }
       WXDomModule domModule = getDomModule(instanceId);
-      DOMAction addElementAction = Actions.getAddElement(domObject, ref, Integer.parseInt(index));
+      DOMAction addElementAction = Actions.getAddElement(domObject, ref,Integer.parseInt(index));
       domModule.postAction(addElementAction, false);
 
       if (WXTracing.isAvailable() && addElementAction instanceof TraceableAction) {
@@ -929,57 +940,57 @@ public class WXBridgeManager implements Callback, BactchExecutor {
   }
 
   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);
+        String url = null;
+        WXSDKInstance instance = WXSDKManager.getInstance().getSDKInstance(instanceId);
+        if (instance != null) {
+          url = instance.getBundleUrl();
         }
-      } catch (Throwable e) {
-        e.printStackTrace();
-      }
-      callReportCrash(crashFile, instanceId, url);
-      if (reInitCount > CRASHREINIT) {
-        return IWXBridge.INSTANCE_RENDERING_ERROR;
-      }
-      reInitCount++;
-      // reinit frame work
-      mInit = false;
-      initScriptsFramework("");
+        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
+        mInit = false;
+        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);
       }
-    } catch (Exception e) {
-      WXLogUtils.e("[WXBridgeManager] callReportCrashReloadPage exception: ", e);
-    }
-    try {
+      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);
-      }
+          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);
-      commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_ERR_RELOAD_PAGE, "[WXBridgeManager] callReloadPage exception " + e.getCause());
-    }
-    return IWXBridge.INSTANCE_RENDERING_ERROR;
+      } catch (Exception e) {
+          WXLogUtils.e("[WXBridgeManager] callReloadPage exception: ", e);
+          commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_ERR_RELOAD_PAGE,"[WXBridgeManager] callReloadPage exception "+e.getCause());
+      }
+      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 != null && !crashUrl.equals(aUrl)) ||
+            ((time - lastCrashTime) > 15000)) {
       crashUrl = aUrl;
       lastCrashTime = time;
       return true;
@@ -989,46 +1000,49 @@ public class WXBridgeManager implements Callback, BactchExecutor {
   }
 
   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();
+      // 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 {
-                BufferedReader br = new BufferedReader(new FileReader(origin_filename));
-                String s = null;
-                // boolean foundStart = false;
-                while ((s = br.readLine()) != null) {
-                  if ("".equals(s)) {
-                    continue;
+                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");
+                    // 没收集到crash堆栈不上传
+                    // commitJscCrashAlarmMonitor(IWXUserTrackAdapter.JS_BRIDGE,  WXErrorCode.WX_ERR_JSC_CRASH, "crash info file empty", instanceId, url);
                   }
-                  // if (("r0:").equals(s)) {
-                  //  break;
-                  // }
-                  result.append(s + "\n");
+                  file.delete();
                 }
-                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();
-          }
 //                  Log.e("reportServerCrash", "WXBridge reportServerCrash crashFile:" + origin_filename);
 //                  String filename = CRASHPATH;
 //                  File oldfile = new File(origin_filename);
@@ -1055,17 +1069,17 @@ public class WXBridgeManager implements Callback, BactchExecutor {
 //                  } else {
 //                      Log.e("reportServerCrash", "WXBridge /data/data/com.taobao.taobao/app_tombstone/com.taobao.taobao/crashsdk/logs not exsist");
 //                  }
-        } catch (Throwable throwable) {
-          WXLogUtils.e("[WXBridgeManager] callReportCrash exception: ", throwable);
-        }
-      }
-    });
-    t.start();
+              } 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, "{}");
+    addJSTask(METHOD_CALLBACK,instanceId, callback, "{}");
     sendMessage(instanceId, WXJSBridgeMsgType.CALL_JS_BATCH);
   }
 
@@ -1080,12 +1094,12 @@ public class WXBridgeManager implements Callback, BactchExecutor {
 
         ArrayList<Object> argsList = new ArrayList<>();
         for (Object arg : args) {
-          argsList.add(arg);
+            argsList.add(arg);
         }
-        if (params != null) {
-          ArrayMap map = new ArrayMap(4);
-          map.put(KEY_PARAMS, params);
-          argsList.add(map);
+        if(params != null){
+           ArrayMap map = new ArrayMap(4);
+           map.put(KEY_PARAMS, params);
+           argsList.add(map);
         }
 
         WXHashMap<String, Object> task = new WXHashMap<>();
@@ -1117,7 +1131,6 @@ public class WXBridgeManager implements Callback, BactchExecutor {
 
   /**
    * Initialize JavaScript framework
-   *
    * @param framework String representation of the framework to be init.
    */
   public synchronized void initScriptsFramework(String framework) {
@@ -1130,13 +1143,12 @@ public class WXBridgeManager implements Callback, BactchExecutor {
 
   @Deprecated
   public void fireEvent(final String instanceId, final String ref,
-                        final String type, final Map<String, Object> data) {
+                        final String type, final Map<String, Object> data){
     this.fireEvent(instanceId, ref, type, data, null);
   }
 
   /**
    * Do not direct invoke this method in Components, use {@link WXSDKInstance#fireEvent(String, String, Map, Map)} instead.
-   *
    * @param instanceId
    * @param ref
    * @param type
@@ -1145,16 +1157,16 @@ public class WXBridgeManager implements Callback, BactchExecutor {
    */
   @Deprecated
   public void fireEvent(final String instanceId, final String ref,
-                        final String type, final Map<String, Object> data, final Map<String, Object> domChanges) {
-    fireEventOnNode(instanceId, ref, type, data, domChanges);
+                        final String type, final Map<String, Object> data,final Map<String, Object> domChanges) {
+    fireEventOnNode(instanceId,ref,type,data,domChanges);
   }
 
   /**
    * Notify the JavaScript about the event happened on Android
    */
   public void fireEventOnNode(final String instanceId, final String ref,
-                              final String type, final Map<String, Object> data, final Map<String, Object> domChanges) {
-    fireEventOnNode(instanceId, ref, type, data, domChanges, null);
+                        final String type, final Map<String, Object> data,final Map<String, Object> domChanges) {
+      fireEventOnNode(instanceId, ref, type, data, domChanges, null);
   }
 
   /**
@@ -1164,12 +1176,12 @@ public class WXBridgeManager implements Callback, BactchExecutor {
                               final String type, final Map<String, Object> data,
                               final Map<String, Object> domChanges, List<Object> params) {
     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");
     }
     addJSEventTask(METHOD_FIRE_EVENT, instanceId, params, ref, type, data, domChanges);
     sendMessage(instanceId, WXJSBridgeMsgType.CALL_JS_BATCH);
@@ -1182,12 +1194,11 @@ public class WXBridgeManager implements Callback, BactchExecutor {
 
   /**
    * Invoke JavaScript callback. Use {@link JSCallback} instead.
-   *
    * @see #callback(String, String, String)
    */
   @Deprecated
-  public void callback(String instanceId, String callback, String data) {
-    callback(instanceId, callback, data, false);
+  public void callback(String instanceId, String callback,String data) {
+    callback(instanceId, callback,data,false);
   }
 
   /**
@@ -1195,31 +1206,29 @@ public class WXBridgeManager implements Callback, BactchExecutor {
    */
   @Deprecated
   public void callback(final String instanceId, final String callback,
-                       final Map<String, Object> data) {
-    callback(instanceId, callback, data, false);
+                       final Map<String, Object> data){
+    callback(instanceId,callback,data,false);
   }
 
   /**
    * Use {@link JSCallback} instead.
-   *
    * @param instanceId Weex Instance Id
-   * @param callback   callback referenece handle
-   * @param data       callback data
-   * @param keepAlive  if keep callback instance alive for later use
-   */
+   * @param callback  callback referenece handle
+   * @param data callback data
+   * @param keepAlive if keep callback instance alive for later use
+     */
   @Deprecated
   public void callback(final String instanceId, final String callback,
-                       final Object data, boolean keepAlive) {
-    callbackJavascript(instanceId, callback, data, keepAlive);
+                       final Object data,boolean keepAlive) {
+    callbackJavascript(instanceId,callback,data,keepAlive);
   }
 
   /**
    * Callback to Javascript function.
-   *
    * @param instanceId Weex Instance Id
-   * @param callback   callback referenece handle
-   * @param data       callback data
-   * @param keepAlive  if keep callback instance alive for later use
+   * @param callback  callback referenece handle
+   * @param data callback data
+   * @param keepAlive if keep callback instance alive for later use
    */
   void callbackJavascript(final String instanceId, final String callback,
                           final Object data, boolean keepAlive) {
@@ -1228,7 +1237,7 @@ public class WXBridgeManager implements Callback, BactchExecutor {
       return;
     }
 
-    addJSTask(METHOD_CALLBACK, instanceId, callback, data, keepAlive);
+    addJSTask(METHOD_CALLBACK, instanceId, callback, data,keepAlive);
     sendMessage(instanceId, WXJSBridgeMsgType.CALL_JS_BATCH);
   }
 
@@ -1253,32 +1262,32 @@ public class WXBridgeManager implements Callback, BactchExecutor {
         WXSDKInstance instance = WXSDKManager.getInstance().getSDKInstance(instanceId);
         if (instance != null) {
           instance.onRenderError(WXRenderErrorCode.WX_CREATE_INSTANCE_ERROR,
-              "createInstance failed!");
+                                 "createInstance failed!");
         }
         String err = "[WXBridgeManager] invokeRefreshInstance: framework.js uninitialized.";
-        commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_ERR_INVOKE_NATIVE, err);
+        commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_ERR_INVOKE_NATIVE,err);
         WXLogUtils.d(err);
         return;
       }
       long start = System.currentTimeMillis();
       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 " + e.getCause();
-      commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_ERR_INVOKE_NATIVE, err);
+      commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_ERR_INVOKE_NATIVE,err);
       WXLogUtils.e(err);
     }
   }
@@ -1298,11 +1307,11 @@ public class WXBridgeManager implements Callback, BactchExecutor {
       return;
     }
     WXPerformance performance = new WXPerformance();
-    performance.args = instance.getBundleUrl();
-    performance.errCode = errCode.getErrorCode();
+    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());
+      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());
   }
@@ -1324,8 +1333,8 @@ public class WXBridgeManager implements Callback, BactchExecutor {
     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());
+      performance.appendErrMsg(TextUtils.isEmpty(errMsg)?errorCode.getErrorMsg():errMsg);
+      WXLogUtils.e("wx_monitor",performance.toString());
     }
     userTrackAdapter.commit(WXEnvironment.getApplication(), null, type, performance, null);
   }
@@ -1339,15 +1348,15 @@ public class WXBridgeManager implements Callback, BactchExecutor {
 
     String method = "callReportCrash";
     String exception = "weexjsc process crash and restart exception";
-    Map<String, String> extParams = new HashMap<String, String>();
+    Map<String,String> extParams = new HashMap<String, String>();
     extParams.put("jscCrashStack", errMsg);
     IWXJSExceptionAdapter adapter = WXSDKManager.getInstance().getIWXJSExceptionAdapter();
     if (adapter != null) {
-      WXJSExceptionInfo jsException = new WXJSExceptionInfo(instanceId, url, errorCode.getErrorCode(), method, exception, extParams);
-      adapter.onJSException(jsException);
-      // if (WXEnvironment.isApkDebugable()) {
-      WXLogUtils.e(jsException.toString());
-      // }
+        WXJSExceptionInfo jsException = new WXJSExceptionInfo(instanceId, url, errorCode.getErrorCode(), method, exception, extParams);
+        adapter.onJSException(jsException);
+        // if (WXEnvironment.isApkDebugable()) {
+          WXLogUtils.e(jsException.toString());
+        // }
     }
   }
 
@@ -1357,27 +1366,15 @@ public class WXBridgeManager implements Callback, BactchExecutor {
   public void createInstance(final String instanceId, final String template,
                              final Map<String, Object> options, final String data) {
     final WXSDKInstance instance = WXSDKManager.getInstance().getSDKInstance(instanceId);
-    if (instance == null) {
-      WXLogUtils.e("WXBridgeManager", "createInstance failed, SDKInstance is not exist");
+    if(instance == null){
+      WXLogUtils.e("WXBridgeManager","createInstance failed, SDKInstance is not exist");
       return;
     }
-    if (TextUtils.isEmpty(instanceId)
+    if ( TextUtils.isEmpty(instanceId)
         || TextUtils.isEmpty(template) || mJSHandler == null) {
       instance.onRenderError(WXRenderErrorCode.WX_CREATE_INSTANCE_ERROR, "createInstance fail!");
       return;
     }
-
-    if (!isJSFrameworkInit() && reInitCount == 1) {
-      instance.onRenderError(WXRenderErrorCode.WX_CREATE_INSTANCE_ERROR, "createInstance fail!");
-      post(new Runnable() {
-        @Override
-        public void run() {
-          initFramework("");
-        }
-      }, instanceId);
-      return;
-    }
-
     WXModuleManager.createDomModule(instance);
     post(new Runnable() {
       @Override
@@ -1389,7 +1386,7 @@ public class WXBridgeManager implements Callback, BactchExecutor {
 
           @Override
           public void run() {
-            instance.createInstanceFinished(totalTime);
+              instance.createInstanceFinished(totalTime);
           }
         }, 0);
       }
@@ -1406,37 +1403,37 @@ public class WXBridgeManager implements Callback, BactchExecutor {
     } else {
       if (!isJSFrameworkInit()) {
         instance.onRenderError(WXRenderErrorCode.WX_CREATE_INSTANCE_ERROR, "createInstance "
-            + "fail!");
+                                                                             + "fail!");
         String err = "[WXBridgeManager] invokeCreateInstance: framework.js uninitialized.";
-        commitJSBridgeAlarmMonitor(instance.getInstanceId(), WXErrorCode.WX_ERR_INVOKE_NATIVE, err);
+        commitJSBridgeAlarmMonitor(instance.getInstanceId(), WXErrorCode.WX_ERR_INVOKE_NATIVE,err);
         WXLogUtils.e(err);
         return;
       }
       try {
         if (WXEnvironment.isApkDebugable()) {
           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));
         WXJSObject dataObj = new WXJSObject(WXJSObject.JSON,
-            data == null ? "{}" : data);
+                data == null ? "{}" : data);
         WXJSObject[] args = {instanceIdObj, instanceObj, optionsObj,
-            dataObj};
-        invokeExecJS(instance.getInstanceId(), null, METHOD_CREATE_INSTANCE, args, false);
+                dataObj};
+        invokeExecJS(instance.getInstanceId(), null, METHOD_CREATE_INSTANCE, args,false);
       } catch (Throwable e) {
         instance.onRenderError(WXRenderErrorCode.WX_CREATE_INSTANCE_ERROR,
-            "createInstance failed!");
+                                 "createInstance failed!");
         String err = "[WXBridgeManager] invokeCreateInstance " + e.getCause()
-            + " template md5 " + WXFileUtils.md5(template) + " length " + (template == null ? 0 : template.length());
-        commitJSBridgeAlarmMonitor(instance.getInstanceId(), WXErrorCode.WX_ERR_INVOKE_NATIVE, err);
+                + " template md5 " + WXFileUtils.md5(template) + " length " + (template == null ? 0 : template.length());
+        commitJSBridgeAlarmMonitor(instance.getInstanceId(), WXErrorCode.WX_ERR_INVOKE_NATIVE,err);
         WXLogUtils.e(err);
       }
     }
@@ -1447,11 +1444,11 @@ public class WXBridgeManager implements Callback, BactchExecutor {
   }
 
   public void destroyInstance(final String instanceId) {
-    if (mJSHandler == null
+    if ( mJSHandler == null
         || TextUtils.isEmpty(instanceId)) {
       return;
     }
-    if (mDestroyedInstanceId != null) {
+    if(mDestroyedInstanceId!=null) {
       mDestroyedInstanceId.add(instanceId);
     }
     // clear message with instanceId
@@ -1475,12 +1472,12 @@ public class WXBridgeManager implements Callback, BactchExecutor {
         WXLogUtils.d("destroyInstance >>>> instanceId:" + instanceId);
       }
       WXJSObject instanceIdObj = new WXJSObject(WXJSObject.String,
-          instanceId);
+                                                instanceId);
       WXJSObject[] args = {instanceIdObj};
       invokeExecJS(instanceId, null, METHOD_DESTROY_INSTANCE, args);
     } catch (Throwable e) {
       String err = "[WXBridgeManager] invokeDestroyInstance " + e.getCause();
-      commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_ERR_INVOKE_NATIVE, err);
+      commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_ERR_INVOKE_NATIVE,err);
       WXLogUtils.e(err);
     }
   }
@@ -1501,7 +1498,7 @@ public class WXBridgeManager implements Callback, BactchExecutor {
         break;
       case WXJSBridgeMsgType.SET_TIMEOUT:
         TimerInfo timerInfo = (TimerInfo) msg.obj;
-        if (timerInfo == null) {
+        if(timerInfo == null){
           break;
         }
         WXJSObject obj = new WXJSObject(WXJSObject.String, timerInfo.callbackId);
@@ -1525,14 +1522,14 @@ public class WXBridgeManager implements Callback, BactchExecutor {
   }
 
   public void invokeExecJS(String instanceId, String namespace, String function,
-                           WXJSObject[] args, boolean logTaskDetail) {
+                            WXJSObject[] args,boolean logTaskDetail){
     // if (WXEnvironment.isApkDebugable()) {
-    mLodBuilder.append("callJS >>>> instanceId:").append(instanceId)
-        .append("function:").append(function);
-    if (logTaskDetail)
-      mLodBuilder.append(" tasks:").append(WXJsonUtils.fromObjectToJSONString(args));
-    WXLogUtils.d(mLodBuilder.substring(0));
-    mLodBuilder.setLength(0);
+      mLodBuilder.append("callJS >>>> instanceId:").append(instanceId)
+              .append("function:").append(function);
+      if(logTaskDetail)
+        mLodBuilder.append(" tasks:").append(WXJsonUtils.fromObjectToJSONString(args));
+      WXLogUtils.d(mLodBuilder.substring(0));
+      mLodBuilder.setLength(0);
     // }
     mWXBridge.execJS(instanceId, namespace, function, args);
   }
@@ -1543,16 +1540,16 @@ public class WXBridgeManager implements Callback, BactchExecutor {
       framework = (String) msg.obj;
     }
 
-    if (WXUtils.getAvailMemory(WXEnvironment.getApplication()) > LOW_MEM_VALUE) {
+    if(WXUtils.getAvailMemory(WXEnvironment.getApplication()) > LOW_MEM_VALUE) {
       initFramework(framework);
     }
   }
 
-  private void initFramework(String framework) {
+  private void initFramework(String framework){
     if (!isJSFrameworkInit()) {
       if (TextUtils.isEmpty(framework)) {
         // if (WXEnvironment.isApkDebugable()) {
-        WXLogUtils.d("weex JS framework from assets");
+          WXLogUtils.d("weex JS framework from assets");
         // }
         framework = WXFileUtils.loadAsset("main.js", WXEnvironment.getApplication());
       }
@@ -1567,23 +1564,7 @@ public class WXBridgeManager implements Callback, BactchExecutor {
         }
 
         long start = System.currentTimeMillis();
-        String crashFile = "";
-        try {
-          crashFile = WXEnvironment.getApplication().getApplicationContext().getCacheDir().getPath();
-        } catch (Exception e) {
-          e.printStackTrace();
-        }
-        boolean pieSupport = true;
-        try {
-          if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
-            pieSupport = false;
-          }
-        } catch (Exception e) {
-          e.printStackTrace();
-        }
-        WXLogUtils.d("[WXBridgeManager] initFrameworkEnv crashFile:" + crashFile + " pieSupport:" + pieSupport);
-        // extends initFramework
-        if (mWXBridge.initFrameworkEnv(framework, assembleDefaultOptions(), crashFile, pieSupport) == INIT_FRAMEWORK_OK) {
+        if(mWXBridge.initFramework(framework, assembleDefaultOptions())==INIT_FRAMEWORK_OK){
           WXEnvironment.sJSLibInitTime = System.currentTimeMillis() - start;
           WXLogUtils.renderPerformanceLog("initFramework", WXEnvironment.sJSLibInitTime);
           WXEnvironment.sSDKInitTime = System.currentTimeMillis() - WXEnvironment.sSDKInitStart;
@@ -1602,25 +1583,25 @@ public class WXBridgeManager implements Callback, BactchExecutor {
             reinitInfo = "reinit Framework:";
           }
           commitJSFrameworkAlarmMonitor(IWXUserTrackAdapter.JS_FRAMEWORK, WXErrorCode.WX_SUCCESS, reinitInfo + "success");
-        } else {
+        }else{
           if (reInitCount > 1) {
             WXLogUtils.e("[WXBridgeManager] invokeReInitFramework  ExecuteJavaScript fail");
-            String err = "[WXBridgeManager] invokeReInitFramework  ExecuteJavaScript fail reinit FrameWork";
+            String err="[WXBridgeManager] invokeReInitFramework  ExecuteJavaScript fail reinit FrameWork";
             commitJSFrameworkAlarmMonitor(IWXUserTrackAdapter.JS_FRAMEWORK, WXErrorCode.WX_ERR_JS_REINIT_FRAMEWORK, err);
           } else {
             WXLogUtils.e("[WXBridgeManager] invokeInitFramework  ExecuteJavaScript fail");
-            String err = "[WXBridgeManager] invokeInitFramework  ExecuteJavaScript fail";
+            String err="[WXBridgeManager] invokeInitFramework  ExecuteJavaScript fail";
             commitJSFrameworkAlarmMonitor(IWXUserTrackAdapter.JS_FRAMEWORK, WXErrorCode.WX_ERR_JS_FRAMEWORK, err);
           }
         }
       } catch (Throwable e) {
         if (reInitCount > 1) {
           WXLogUtils.e("[WXBridgeManager] invokeInitFramework ", e);
-          String err = "[WXBridgeManager] invokeInitFramework reinit FrameWork exception!#" + e.toString();
+          String err="[WXBridgeManager] invokeInitFramework reinit FrameWork exception!#"+e.toString();
           commitJSFrameworkAlarmMonitor(IWXUserTrackAdapter.JS_FRAMEWORK, WXErrorCode.WX_ERR_JS_REINIT_FRAMEWORK, err);
         } else {
           WXLogUtils.e("[WXBridgeManager] invokeInitFramework ", e);
-          String err = "[WXBridgeManager] invokeInitFramework exception!#" + e.toString();
+          String err="[WXBridgeManager] invokeInitFramework exception!#"+e.toString();
           commitJSFrameworkAlarmMonitor(IWXUserTrackAdapter.JS_FRAMEWORK, WXErrorCode.WX_ERR_JS_FRAMEWORK, err);
         }
       }
@@ -1632,7 +1613,7 @@ public class WXBridgeManager implements Callback, BactchExecutor {
   private void invokeCallJSBatch(Message message) {
     if (mNextTickTasks.isEmpty() || !isJSFrameworkInit()) {
       if (!isJSFrameworkInit()) {
-        WXLogUtils.e("[WXBridgeManager] invokeCallJSBatch: framework.js uninitialized!!  message:" + message.toString());
+        WXLogUtils.e("[WXBridgeManager] invokeCallJSBatch: framework.js uninitialized!!  message:"+message.toString());
       }
       return;
     }
@@ -1653,16 +1634,16 @@ public class WXBridgeManager implements Callback, BactchExecutor {
       task = ((ArrayList) task).toArray();
 
       WXJSObject[] args = {
-          new WXJSObject(WXJSObject.String, instanceId),
-          new WXJSObject(WXJSObject.JSON,
-              WXJsonUtils.fromObjectToJSONString(task))};
+              new WXJSObject(WXJSObject.String, instanceId),
+              new WXJSObject(WXJSObject.JSON,
+                      WXJsonUtils.fromObjectToJSONString(task))};
 
       invokeExecJS(String.valueOf(instanceId), null, METHOD_CALL_JS, args);
 
     } catch (Throwable e) {
       WXLogUtils.e("WXBridgeManager", e);
-      String err = "invokeCallJSBatch#" + e.toString();
-      commitJSBridgeAlarmMonitor(message.obj.toString(), WXErrorCode.WX_ERR_JS_EXECUTE, err);
+      String err="invokeCallJSBatch#"+e.toString();
+      commitJSBridgeAlarmMonitor(message.obj.toString(), WXErrorCode.WX_ERR_JS_EXECUTE,err);
     }
 
     // If task is not empty, loop until it is empty
@@ -1734,16 +1715,16 @@ public class WXBridgeManager implements Callback, BactchExecutor {
 
   /**
    * Register Android module
-   *
    * @param modules the format is like
    *                {'dom':['updateAttrs','updateStyle'],'event':['openUrl']}
    */
 
   public void registerModules(final Map<String, Object> modules) {
     if (modules != null && modules.size() != 0) {
-      if (isJSThread()) {
+      if(isJSThread()){
         invokeRegisterModules(modules, mRegisterModuleFailList);
-      } else {
+      }
+      else{
         post(new Runnable() {
           @Override
           public void run() {
@@ -1758,7 +1739,7 @@ public class WXBridgeManager implements Callback, BactchExecutor {
    * Registered component
    */
   public void registerComponents(final List<Map<String, Object>> components) {
-    if (mJSHandler == null || components == null
+    if ( mJSHandler == null || components == null
         || components.size() == 0) {
       return;
     }
@@ -1789,7 +1770,7 @@ public class WXBridgeManager implements Callback, BactchExecutor {
       mWXBridge.execJSService(service);
     } catch (Throwable e) {
       WXLogUtils.e("[WXBridgeManager] invokeRegisterService:", e);
-      commitJSFrameworkAlarmMonitor(IWXUserTrackAdapter.JS_FRAMEWORK, WXErrorCode.WX_ERR_JS_EXECUTE, "invokeRegisterService");
+      commitJSFrameworkAlarmMonitor(IWXUserTrackAdapter.JS_FRAMEWORK,WXErrorCode.WX_ERR_JS_EXECUTE,"invokeRegisterService");
     }
   }
 
@@ -1807,38 +1788,38 @@ public class WXBridgeManager implements Callback, BactchExecutor {
     }
 
     WXJSObject[] args = {new WXJSObject(WXJSObject.JSON,
-        WXJsonUtils.fromObjectToJSONString(modules))};
+                                        WXJsonUtils.fromObjectToJSONString(modules))};
     try {
       mWXBridge.execJS("", null, METHOD_REGISTER_MODULES, args);
     } catch (Throwable e) {
       WXLogUtils.e("[WXBridgeManager] invokeRegisterModules:", e);
-      commitJSFrameworkAlarmMonitor(IWXUserTrackAdapter.JS_FRAMEWORK, WXErrorCode.WX_ERR_JS_EXECUTE, "invokeRegisterModules");
+      commitJSFrameworkAlarmMonitor(IWXUserTrackAdapter.JS_FRAMEWORK,WXErrorCode.WX_ERR_JS_EXECUTE,"invokeRegisterModules");
     }
   }
 
   private void invokeRegisterComponents(List<Map<String, Object>> components, List<Map<String, Object>> failReceiver) {
-    if (components == failReceiver) {
+    if(components == failReceiver){
       throw new RuntimeException("Fail receiver should not use source.");
     }
     if (!isJSFrameworkInit()) {
       WXLogUtils.e("[WXBridgeManager] invokeRegisterComponents: framework.js uninitialized.");
 
-      for (Map<String, Object> comp : components) {
+      for (Map<String,Object> comp:components){
         failReceiver.add(comp);
       }
       return;
     }
-    if (components == null) {
+    if(components == null){
       return;
     }
 
     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);
-      commitJSFrameworkAlarmMonitor(IWXUserTrackAdapter.JS_FRAMEWORK, WXErrorCode.WX_ERR_JS_EXECUTE, "invokeRegisterComponents");
+      commitJSFrameworkAlarmMonitor(IWXUserTrackAdapter.JS_FRAMEWORK,WXErrorCode.WX_ERR_JS_EXECUTE,"invokeRegisterComponents");
     }
   }
 
@@ -1847,7 +1828,7 @@ public class WXBridgeManager implements Callback, BactchExecutor {
       mJSThread.quit();
     }
     mBridgeManager = null;
-    if (mDestroyedInstanceId != null) {
+    if(mDestroyedInstanceId!=null){
       mDestroyedInstanceId.clear();
     }
 
@@ -1858,98 +1839,105 @@ public class WXBridgeManager implements Callback, BactchExecutor {
    */
   public void reportJSException(String instanceId, String function,
                                 String exception) {
-    WXLogUtils.e("reportJSException >>>> instanceId:" + instanceId
-        + ", exception function:" + function + ", exception:"
-        + exception);
-    WXSDKInstance instance = null;
-    if (instanceId != null && (instance = WXSDKManager.getInstance().getSDKInstance(instanceId)) != null) {
-      instance.onJSException(WXErrorCode.WX_ERR_JS_EXECUTE.getErrorCode(), function, exception);
-
-      if (METHOD_CREATE_INSTANCE.equals(function)) {
-        try {
-          if (reInitCount > 1 && !instance.isNeedReLoad()) {
-            // JSONObject domObject = JSON.parseObject(tasks);
-            WXDomModule domModule = getDomModule(instanceId);
-            Action action = Actions.getReloadPage(instanceId, true);
-            domModule.postAction((DOMAction) action, true);
-            instance.setNeedLoad(true);
-            return;
+      WXLogUtils.e("reportJSException >>>> instanceId:" + instanceId
+              + ", exception function:" + function + ", exception:"
+              + exception);
+	  WXSDKInstance instance = null;
+      if (instanceId != null && (instance = WXSDKManager.getInstance().getSDKInstance(instanceId)) != null) {
+          instance.onJSException(WXErrorCode.WX_ERR_JS_EXECUTE.getErrorCode(), function, exception);
+
+          if (METHOD_CREATE_INSTANCE.equals(function)) {
+              try {
+                  if (reInitCount > 1 && !instance.isNeedReLoad()) {
+                      // JSONObject domObject = JSON.parseObject(tasks);
+                      WXDomModule domModule = getDomModule(instanceId);
+                      Action action = Actions.getReloadPage(instanceId, true);
+                      domModule.postAction((DOMAction) action, true);
+                      instance.setNeedLoad(true);
+                      return;
+                  }
+              } catch (Exception e) {
+                  e.printStackTrace();
+              }
           }
-        } catch (Exception e) {
-          e.printStackTrace();
-        }
+          String err = "function:" + function + "#exception:" + exception;
+          commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_ERR_JS_EXECUTE, err);
       }
-      String err = "function:" + function + "#exception:" + exception;
-      commitJSBridgeAlarmMonitor(instanceId, WXErrorCode.WX_ERR_JS_EXECUTE, err);
-    }
 
-    IWXJSExceptionAdapter adapter = WXSDKManager.getInstance().getIWXJSExceptionAdapter();
-    if (adapter != null) {
-      String bundleUrl;
-      String exceptionId = instanceId;
+      IWXJSExceptionAdapter adapter = WXSDKManager.getInstance().getIWXJSExceptionAdapter();
+      if (adapter != null) {
+          String bundleUrl;
+          String exceptionId = instanceId;
 
-      if (instanceId == "" || instanceId == null) {
-        exceptionId = "instanceIdisNull";
-      }
+          if (instanceId == "" || instanceId == null) {
+              exceptionId = "instanceIdisNull";
+          }
 
-      if (instance == null) {
-        if (("initFramework").equals(function)) {
-          bundleUrl = "jsExceptionBeforeRenderInstanceNull";
-          String exceptionExt = null;
-          try {
-            if (WXEnvironment.getApplication() != null) {
-              final String fileName = WXEnvironment.getApplication().getApplicationContext().getCacheDir().getPath() + INITLOGFILE;
-              try {
-                File file = new File(fileName);
-                if (file.exists()) {
-                  if (file.length() > 0) {
-                    StringBuilder result = new StringBuilder();
-                    try {
-                      InputStreamReader read = new InputStreamReader(new FileInputStream(file), "UTF-8");
-                      BufferedReader br = new BufferedReader(read);
-                      String s = null;
-                      while ((s = br.readLine()) != null) {
-                        result.append(s + "\n");
+          if (instance == null) {
+              if (("initFramework").equals(function)) {
+                  bundleUrl = "jsExceptionBeforeRenderInstanceNull";
+                  String exceptionExt = null;
+                  try {
+                      if (WXEnvironment.getApplication() != null) {
+                          final String fileName = WXEnvironment.getApplication().getApplicationContext().getCacheDir().getPath() + INITLOGFILE;
+                          try {
+                              File file = new File(fileName);
+                              if (file.exists()) {
+                                  if (file.length() > 0) {
+                                      StringBuilder result = new StringBuilder();
+                                      try {
+                                          InputStreamReader read = new InputStreamReader(new FileInputStream(file), "UTF-8");
+                                          BufferedReader br = new BufferedReader(read);
+                                          String s = null;
+                                          while ((s = br.readLine()) != null) {
+                                              result.append(s + "\n");
+                                          }
+                                          exceptionExt = result.toString();
+                                          br.close();
+                                      } catch (Exception e) {
+                                          e.printStackTrace();
+                                      }
+                                  }
+                                  file.delete();
+                              }
+                          } catch (Throwable throwable) {
+
+                          }
                       }
-                      exceptionExt = result.toString();
-                      br.close();
-                    } catch (Exception e) {
+                  } catch (Throwable e) {
                       e.printStackTrace();
-                    }
                   }
-                  file.delete();
-                }
-              } catch (Throwable throwable) {
+                  exception += "\n" + exceptionExt;
+                  WXLogUtils.e("reportJSException:" + exception);
 
+              } else if (function == null) {
+                  bundleUrl = "jsExceptionInstanceAndFunctionNull";
+              } else {
+                  bundleUrl = "jsExceptionInstanceNull" + function;
               }
-            }
-          } catch (Throwable e) {
-            e.printStackTrace();
+          } else {
+              bundleUrl = instance.getBundleUrl();
           }
-          exception += "\n" + exceptionExt;
-          WXLogUtils.e("reportJSException:" + exception);
 
-        } else if (function == null) {
-          bundleUrl = "jsExceptionInstanceAndFunctionNull";
-        } else {
-          bundleUrl = "jsExceptionInstanceNull" + function;
-        }
-      } else {
-        bundleUrl = instance.getBundleUrl();
+          WXJSExceptionInfo jsException = new WXJSExceptionInfo(exceptionId, bundleUrl, WXErrorCode.WX_ERR_JS_EXECUTE.getErrorCode(), function, exception, null);
+          adapter.onJSException(jsException);
+          if (WXEnvironment.isApkDebugable()) {
+              WXLogUtils.d(jsException.toString());
+          }
       }
+  }
 
-      WXJSExceptionInfo jsException = new WXJSExceptionInfo(exceptionId, bundleUrl, WXErrorCode.WX_ERR_JS_EXECUTE.getErrorCode(), function, exception, null);
-      adapter.onJSException(jsException);
-      if (WXEnvironment.isApkDebugable()) {
-        WXLogUtils.d(jsException.toString());
-      }
-    }
+  public static class TimerInfo {
+
+    public String callbackId;
+    public long time;
+    public String instanceId;
   }
 
   private void registerDomModule() throws WXException {
     /** Tell Javascript Framework what methods you have. This is Required.**/
-    Map<String, Object> domMap = new HashMap<>();
-    domMap.put(WXDomModule.WXDOM, WXDomModule.METHODS);
+    Map<String,Object> domMap=new HashMap<>();
+    domMap.put(WXDomModule.WXDOM,WXDomModule.METHODS);
     registerModules(domMap);
   }
 
@@ -1975,7 +1963,7 @@ public class WXBridgeManager implements Callback, BactchExecutor {
       public void run() {
         if (!isJSFrameworkInit())
           return;
-
+        
         invokeExecJS("", null, METHOD_NOTIFY_SERIALIZE_CODE_CACHE, new WXJSObject[0]);
       }
     });
@@ -1989,11 +1977,4 @@ public class WXBridgeManager implements Callback, BactchExecutor {
     msg.sendToTarget();
   }
 
-  public static class TimerInfo {
-
-    public String callbackId;
-    public long time;
-    public String instanceId;
-  }
-
 }

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/bdcc5356/android/sdk/src/main/java/com/taobao/weex/common/Constants.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/common/Constants.java b/android/sdk/src/main/java/com/taobao/weex/common/Constants.java
index 842229e..94ac1e0 100644
--- a/android/sdk/src/main/java/com/taobao/weex/common/Constants.java
+++ b/android/sdk/src/main/java/com/taobao/weex/common/Constants.java
@@ -183,9 +183,6 @@ public class Constants {
     String ARIA_LABEL = "ariaLabel";
     String ARIA_HIDDEN = "ariaHidden";
 
-    String STICKY_OFFSET = "stickyOffset";
-    String HAS_FIXED_SIZE = "hasFixedSize";
-    String KEEP_POSITION_LAYOUT_DELAY = "keepPositionLayoutDelay";
 
     interface  Recycler{
       String LIST_DATA = "listData";

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/bdcc5356/android/sdk/src/main/java/com/taobao/weex/common/IWXBridge.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/common/IWXBridge.java b/android/sdk/src/main/java/com/taobao/weex/common/IWXBridge.java
index 92b1585..9d4885c 100644
--- a/android/sdk/src/main/java/com/taobao/weex/common/IWXBridge.java
+++ b/android/sdk/src/main/java/com/taobao/weex/common/IWXBridge.java
@@ -38,15 +38,6 @@ public interface IWXBridge extends IWXObject {
    */
   int initFramework(String framework, WXParams params);
 
-
-  /**
-   * init Weex
-   *
-   * @param framework assets/main.js
-   * @return
-   */
-  int initFrameworkEnv(String framework, WXParams params, String cacheDir, boolean pieSupport);
-
   /**
    * execute javascript function
    */