Repository: incubator-weex
Updated Branches:
  refs/heads/v0.17 28d047512 -> b0704cd11


 [WEEX-134][android] createInstance and initFramework may on different Thread, 
add volatile static for mInit


Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/713c6193
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/713c6193
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/713c6193

Branch: refs/heads/v0.17
Commit: 713c6193a0a72beddf1800444dfa4c95d4c2dfdd
Parents: d1af84c
Author: yuhun-alibaba <tomcat...@gmail.com>
Authored: Fri Nov 17 00:16:02 2017 +0800
Committer: yuhun-alibaba <tomcat...@gmail.com>
Committed: Mon Nov 20 10:21:46 2017 +0800

----------------------------------------------------------------------
 .../com/taobao/weex/bridge/WXBridgeManager.java | 34 ++++++++++++--------
 1 file changed, 21 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/713c6193/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 b6db683..52187ee 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
@@ -137,9 +137,14 @@ public class WXBridgeManager implements Callback, 
BactchExecutor {
   private static final int CRASHREINIT = 50;
   static volatile WXBridgeManager mBridgeManager;
   private static long LOW_MEM_VALUE = 120;
-  private static int reInitCount = 1;
+  private volatile static int reInitCount = 1;
   private static String crashUrl = null;
   private static long lastCrashTime = 0;
+
+  /**
+   * Whether JS Framework(main.js) has been initialized.
+   */
+  private volatile static boolean mInit = false;
   /**
    * package
    **/
@@ -156,10 +161,7 @@ public class WXBridgeManager implements Callback, 
BactchExecutor {
   private IWXDebugProxy mWxDebugProxy;
 
   private boolean mMock = false;
-  /**
-   * Whether JS Framework(main.js) has been initialized.
-   */
-  private boolean mInit = false;
+
   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);
@@ -185,8 +187,14 @@ public class WXBridgeManager implements Callback, 
BactchExecutor {
     return mBridgeManager;
   }
 
+  // setJSFrameworkInit and isJSFrameworkInit may use on diff thread
+  // use volatile
   private boolean isJSFrameworkInit() {
-    return mInit;
+      return mInit;
+  }
+
+  private void setJSFrameworkInit(boolean init) {
+      mInit = init;
   }
 
   private void initWXBridge(boolean remoteDebug) {
@@ -269,7 +277,7 @@ public class WXBridgeManager implements Callback, 
BactchExecutor {
    * Model switch. For now, debug model and release model are supported
    */
   public void restart() {
-    mInit = false;
+    setJSFrameworkInit(false);
     initWXBridge(WXEnvironment.sRemoteDebugMode);
   }
 
@@ -949,7 +957,7 @@ public class WXBridgeManager implements Callback, 
BactchExecutor {
       }
       reInitCount++;
       // reinit frame work
-      mInit = false;
+      setJSFrameworkInit(false);
       initScriptsFramework("");
 
       if (mDestroyedInstanceId != null && 
mDestroyedInstanceId.contains(instanceId)) {
@@ -1387,8 +1395,8 @@ public class WXBridgeManager implements Callback, 
BactchExecutor {
         final long totalTime = System.currentTimeMillis() - start;
         WXSDKManager.getInstance().postOnUiThread(new Runnable() {
 
-          @Override
-          public void run() {
+            @Override
+            public void run() {
             instance.createInstanceFinished(totalTime);
           }
         }, 0);
@@ -1560,7 +1568,7 @@ public class WXBridgeManager implements Callback, 
BactchExecutor {
         framework = WXFileUtils.loadAsset("main.js", 
WXEnvironment.getApplication());
       }
       if (TextUtils.isEmpty(framework)) {
-        mInit = false;
+        setJSFrameworkInit(false);
         commitJSFrameworkAlarmMonitor(IWXUserTrackAdapter.JS_FRAMEWORK, 
WXErrorCode.WX_ERR_JS_FRAMEWORK, "JS Framework is empty!");
         return;
       }
@@ -1591,7 +1599,7 @@ public class WXBridgeManager implements Callback, 
BactchExecutor {
           WXLogUtils.renderPerformanceLog("initFramework", 
WXEnvironment.sJSLibInitTime);
           WXEnvironment.sSDKInitTime = System.currentTimeMillis() - 
WXEnvironment.sSDKInitStart;
           WXLogUtils.renderPerformanceLog("SDKInitTime", 
WXEnvironment.sSDKInitTime);
-          mInit = true;
+          setJSFrameworkInit(true);
 
           if (WXSDKManager.getInstance().getWXStatisticsListener() != null) {
             
WXSDKManager.getInstance().getWXStatisticsListener().onJsFrameworkReady();
@@ -1870,7 +1878,7 @@ public class WXBridgeManager implements Callback, 
BactchExecutor {
 
       if (METHOD_CREATE_INSTANCE.equals(function)) {
         try {
-          if (mInit && reInitCount > 1 && !instance.isNeedReLoad()) {
+          if (isJSFrameworkInit() && reInitCount > 1 && 
!instance.isNeedReLoad()) {
             // JSONObject domObject = JSON.parseObject(tasks);
             WXDomModule domModule = getDomModule(instanceId);
             Action action = Actions.getReloadPage(instanceId, true);

Reply via email to