diff --git a/.idea/gradle.xml b/.idea/gradle.xml index 1563bc1..8116b81 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -26,6 +26,7 @@ + diff --git a/foudations/mogo-socket/src/main/java/com/mogo/cloud/socket/SocketManager.java b/foudations/mogo-socket/src/main/java/com/mogo/cloud/socket/SocketManager.java index b061625..b11ac7b 100644 --- a/foudations/mogo-socket/src/main/java/com/mogo/cloud/socket/SocketManager.java +++ b/foudations/mogo-socket/src/main/java/com/mogo/cloud/socket/SocketManager.java @@ -182,6 +182,7 @@ public class SocketManager implements IMogoCloudSocketManager { public synchronized void release() { mListeners.clear(); + mAckListeners.clear(); if (cloudClientConfig.isThirdLogin()) { ThirdSocketManager.getInstance().release(); } else { diff --git a/foudations/mogo-socket/src/main/java/com/mogo/cloud/socket/internal/InternalSocketManager.java b/foudations/mogo-socket/src/main/java/com/mogo/cloud/socket/internal/InternalSocketManager.java index aad403e..2b2321d 100644 --- a/foudations/mogo-socket/src/main/java/com/mogo/cloud/socket/internal/InternalSocketManager.java +++ b/foudations/mogo-socket/src/main/java/com/mogo/cloud/socket/internal/InternalSocketManager.java @@ -74,6 +74,8 @@ public class InternalSocketManager implements OnSocketReceiveCallback, OnSocketA public void release() { if (mSocketConnManager != null) { + mSocketConnManager.rmSocketMessageCallback(this); + mSocketConnManager.rmSocketAckCallback(this); mSocketConnManager.onRelease(); mSocketConnManager = null; } diff --git a/foudations/mogo-socket/src/main/java/com/mogo/cloud/socket/third/ThirdSocketManager.java b/foudations/mogo-socket/src/main/java/com/mogo/cloud/socket/third/ThirdSocketManager.java index 1ea17eb..27febf0 100644 --- a/foudations/mogo-socket/src/main/java/com/mogo/cloud/socket/third/ThirdSocketManager.java +++ b/foudations/mogo-socket/src/main/java/com/mogo/cloud/socket/third/ThirdSocketManager.java @@ -50,6 +50,7 @@ public class ThirdSocketManager implements Callback { .setToken(cloudClientConfig.getToken()) .setAuthPubKey(cloudClientConfig.getAuthPubKey()) .setDebug(cloudClientConfig.isShowDebugLog()); + SocketClient.getInstance().registerSocketCallback(this); SocketClient.getInstance().start(context); } @@ -75,6 +76,7 @@ public class ThirdSocketManager implements Callback { } public synchronized void release() { + SocketClient.getInstance().unregisterSocketCallback(this); SocketClient.getInstance().stop(); mInstance = null; } diff --git a/foudations/mogo-utils/src/main/java/com/mogo/cloud/WorkThreadHandler.java b/foudations/mogo-utils/src/main/java/com/mogo/cloud/WorkThreadHandler.java deleted file mode 100644 index 49b2d8c..0000000 --- a/foudations/mogo-utils/src/main/java/com/mogo/cloud/WorkThreadHandler.java +++ /dev/null @@ -1,81 +0,0 @@ -package com.mogo.cloud; - -import android.os.Handler; -import android.os.HandlerThread; -import android.os.Looper; - -/** - * @author congtaowang - * @since 2020-03-23 - *
- * 描述 - */ -public class WorkThreadHandler { - - private Looper mThreadLooper; - private Handler mHandler; - private HandlerThread mThread; - - public static WorkThreadHandler newInstance(String name ) { - return new WorkThreadHandler( name ); - } - - private WorkThreadHandler(String name ) { - // private constructor - mThread = new HandlerThread( name ); - mThread.start(); - mThreadLooper = mThread.getLooper(); - mHandler = new Handler( mThreadLooper ); - } - - private WorkThreadHandler() { - // private constructor - this( "work-thread-handler" ); - } - - private static final class InstanceHolder { - private static final WorkThreadHandler INSTANCE = new WorkThreadHandler(); - } - - public static WorkThreadHandler getInstance() { - return InstanceHolder.INSTANCE; - } - - public Looper getLooper() { - return mThreadLooper; - } - - private Object readResolve() { - // 阻止反序列化,必须实现 Serializable 接口 - return InstanceHolder.INSTANCE; - } - - private Object sToken = new Object(); - - public boolean post( Runnable r ) { - return mHandler != null && mHandler.post( r ); - } - - public boolean postDelayed( Runnable r, long delayMillis ) { - return mHandler != null && mHandler.postDelayed( r, delayMillis ); - } - - public Handler getWorkThreadHandler() { - return mHandler; - } - - public boolean postOnceDelayed( Runnable r, long delayMillis ) { - if ( mHandler == null ) { - return false; - } else { - mHandler.removeCallbacks( r, sToken ); - return mHandler.postDelayed( r, delayMillis ); - } - } - - public void removeCallbacks( Runnable runnable ) { - if ( mHandler != null ) { - mHandler.removeCallbacks( runnable ); - } - } -} diff --git a/modules/mogo-realtime/src/main/java/com/mogo/realtime/core/UploadInTimeHandler.java b/modules/mogo-realtime/src/main/java/com/mogo/realtime/core/UploadInTimeHandler.java index 5ab7013..7da0211 100644 --- a/modules/mogo-realtime/src/main/java/com/mogo/realtime/core/UploadInTimeHandler.java +++ b/modules/mogo-realtime/src/main/java/com/mogo/realtime/core/UploadInTimeHandler.java @@ -1,10 +1,11 @@ package com.mogo.realtime.core; import android.os.Handler; +import android.os.HandlerThread; import android.os.Message; import android.support.annotation.Keep; -import com.mogo.cloud.WorkThreadHandler; +import com.mogo.cloud.utils.logger.Logger; import static com.mogo.realtime.constant.RealTimeConstant.TAG; @@ -17,7 +18,8 @@ public class UploadInTimeHandler { private static final long MSG_DATA_INTERNAL = 500L; private final long uploadDelay = MSG_DATA_INTERNAL; - private Handler mHandler; + private volatile HandlerThread mThread; + private volatile Handler mHandler; private static volatile UploadInTimeHandler uploadInTimeHandler; private IUploadInTimeListener iUploadInTimeListener; @@ -37,9 +39,15 @@ public class UploadInTimeHandler { return uploadInTimeHandler; } - public void start() { + public synchronized void start() { + Logger.d(TAG, "UploadInTimeHandler start"); if (mHandler == null) { - mHandler = new Handler(WorkThreadHandler.newInstance(TAG).getLooper()) { + if (mThread == null) { + mThread = new HandlerThread(TAG); + Logger.d(TAG, "start Handler Thread"); + mThread.start(); + } + mHandler = new Handler(mThread.getLooper()) { @Override public void handleMessage(Message msg) { super.handleMessage(msg); @@ -71,11 +79,20 @@ public class UploadInTimeHandler { } } - public void stop() { - if (mHandler != null && mHandler.hasMessages(MSG_DATA_CHANGED)) { + public synchronized void stop() { + if (mHandler != null) { mHandler.removeMessages(MSG_DATA_CHANGED); mHandler = null; } + if (mThread != null) { + try { + mThread.quit(); + } catch (Exception e) { + e.printStackTrace(); + } + mThread = null; + Logger.d(TAG, "stop Thread set null"); + } iUploadInTimeListener = null; uploadInTimeHandler = null; }