fix bug of AISDK about socket

This commit is contained in:
zhongchao
2021-03-10 12:13:44 +08:00
parent 5a2f7e3af9
commit 75d877fedf
6 changed files with 29 additions and 87 deletions

1
.idea/gradle.xml generated
View File

@@ -26,6 +26,7 @@
</set>
</option>
<option name="resolveModulePerSourceSet" value="false" />
<option name="useQualifiedModuleNames" value="true" />
</GradleProjectSettings>
</option>
</component>

View File

@@ -182,6 +182,7 @@ public class SocketManager implements IMogoCloudSocketManager {
public synchronized void release() {
mListeners.clear();
mAckListeners.clear();
if (cloudClientConfig.isThirdLogin()) {
ThirdSocketManager.getInstance().release();
} else {

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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
* <p>
* 描述
*/
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 );
}
}
}

View File

@@ -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;
}