* [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() {
