fix bug of AISDK about socket
This commit is contained in:
1
.idea/gradle.xml
generated
1
.idea/gradle.xml
generated
@@ -26,6 +26,7 @@
|
||||
</set>
|
||||
</option>
|
||||
<option name="resolveModulePerSourceSet" value="false" />
|
||||
<option name="useQualifiedModuleNames" value="true" />
|
||||
</GradleProjectSettings>
|
||||
</option>
|
||||
</component>
|
||||
|
||||
@@ -182,6 +182,7 @@ public class SocketManager implements IMogoCloudSocketManager {
|
||||
|
||||
public synchronized void release() {
|
||||
mListeners.clear();
|
||||
mAckListeners.clear();
|
||||
if (cloudClientConfig.isThirdLogin()) {
|
||||
ThirdSocketManager.getInstance().release();
|
||||
} else {
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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 );
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user