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>
