* [android] moving network operating to async thread

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

Branch: refs/heads/master
Commit: 78a6e67659fca8d83eb6d8e2fad5e13bd8a36a1a
Parents: 592c340
Author: misakuo <[email protected]>
Authored: Thu Dec 28 15:27:32 2017 +0800
Committer: misakuo <[email protected]>
Committed: Thu Dec 28 15:27:32 2017 +0800

----------------------------------------------------------------------
 .../weex/appfram/websocket/WebSocketModule.java | 41 +++++++++++++++-----
 1 file changed, 31 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/78a6e676/android/sdk/src/main/java/com/taobao/weex/appfram/websocket/WebSocketModule.java
----------------------------------------------------------------------
diff --git 
a/android/sdk/src/main/java/com/taobao/weex/appfram/websocket/WebSocketModule.java
 
b/android/sdk/src/main/java/com/taobao/weex/appfram/websocket/WebSocketModule.java
index 8e6d3b2..f05f560 100644
--- 
a/android/sdk/src/main/java/com/taobao/weex/appfram/websocket/WebSocketModule.java
+++ 
b/android/sdk/src/main/java/com/taobao/weex/appfram/websocket/WebSocketModule.java
@@ -18,9 +18,12 @@
  */
 package com.taobao.weex.appfram.websocket;
 
+import android.os.Looper;
+
 import com.taobao.weex.WXSDKEngine;
 import com.taobao.weex.annotation.JSMethod;
 import com.taobao.weex.bridge.JSCallback;
+import com.taobao.weex.bridge.WXBridgeManager;
 import com.taobao.weex.utils.WXLogUtils;
 
 import java.util.HashMap;
@@ -41,9 +44,14 @@ public class WebSocketModule extends 
WXSDKEngine.DestroyableModule {
     private IWebSocketAdapter webSocketAdapter;
     private WebSocketEventListener eventListener;
 
-    @JSMethod
+    public WebSocketModule() {
+        WXLogUtils.e(TAG, "create new instance");
+    }
+
+    @JSMethod(uiThread = false)
     public void WebSocket(String url, String protocol) {
         if (webSocketAdapter != null) {
+            WXLogUtils.w(TAG, "close");
             
webSocketAdapter.close(WebSocketCloseCodes.CLOSE_GOING_AWAY.getCode(), 
WebSocketCloseCodes.CLOSE_GOING_AWAY.name());
         }
         webSocketAdapter = mWXSDKInstance.getWXWebSocketAdapter();
@@ -53,14 +61,14 @@ public class WebSocketModule extends 
WXSDKEngine.DestroyableModule {
         }
     }
 
-    @JSMethod
+    @JSMethod(uiThread = false)
     public void send(String data) {
         if (!reportErrorIfNoAdapter()) {
             webSocketAdapter.send(data);
         }
     }
 
-    @JSMethod
+    @JSMethod(uiThread = false)
     public void close(String code, String reason) {
         if (!reportErrorIfNoAdapter()) {
             int codeNumber = WebSocketCloseCodes.CLOSE_NORMAL.getCode();
@@ -75,28 +83,28 @@ public class WebSocketModule extends 
WXSDKEngine.DestroyableModule {
         }
     }
 
-    @JSMethod
+    @JSMethod(uiThread = false)
     public void onopen(JSCallback callback) {
         if (eventListener != null) {
             eventListener.onOpen = callback;
         }
     }
 
-    @JSMethod
+    @JSMethod(uiThread = false)
     public void onmessage(JSCallback callback) {
         if (eventListener != null) {
             eventListener.onMessage = callback;
         }
     }
 
-    @JSMethod
+    @JSMethod(uiThread = false)
     public void onclose(JSCallback callback) {
         if (eventListener != null) {
             eventListener.onClose = callback;
         }
     }
 
-    @JSMethod
+    @JSMethod(uiThread = false)
     public void onerror(JSCallback callback) {
         if (eventListener != null) {
             eventListener.onError = callback;
@@ -105,10 +113,23 @@ public class WebSocketModule extends 
WXSDKEngine.DestroyableModule {
 
     @Override
     public void destroy() {
-        if (webSocketAdapter != null) {
-            webSocketAdapter.destroy();
+        Runnable destroyTask = new Runnable() {
+            @Override
+            public void run() {
+                WXLogUtils.w(TAG, "close session with instance id " + 
mWXSDKInstance.getInstanceId());
+                if (webSocketAdapter != null) {
+                    webSocketAdapter.destroy();
+                }
+                webSocketAdapter = null;
+                eventListener = null;
+            }
+        };
+
+        if (Looper.myLooper() == Looper.getMainLooper()) {
+            WXBridgeManager.getInstance().post(destroyTask);
+        } else {
+            destroyTask.run();
         }
-        eventListener = null;
     }
 
     private boolean reportErrorIfNoAdapter() {

Reply via email to