我的类中有一个套接字连接方法,一次只能由1个线程调用。在该同步方法中,我有一个基于随机对象的同步块。我正在通过Android服务调用班级的同步连接方法
问题: 有时,如果socketIO连接花费更长的时间建立连接,则 app进入无响应状态 当套接字URL无法访问时。我不知道为什么会这样。
class MyService extends Service {
public void onStartCommand() {
MyUtilClass.getInstance().init();
MyUtilClass.getInstance().startSomeOSBroadcastListeners();
MyUtilClass.getInstance().connectAsync();
}
}
class MyUtilClass {
private final Object tempObj = new Object();
private MyUtilClass mUtilClass;
public static MyUtilClass getInstance() {
if(mUtilClass == null)
mUtilClass = new MyUtilClass();
return mUtilClass;
}
public void init() {
startListeningSocketIoConnectEvent();
}
public MyUtilClass connectAsync() {
new Thread(new Runnable() {
connect();
}).start();
return this;
}
private synchronized MyUtilClass connect() {
synchronized(tempObj) {
mSocketIO.connect();
tempObject.wait();
}
return this;
}
private void startListeningSocketIoConnectEvent() {
mSocketIO.on(Socket.EVENT_CONNECT, new Emitter.Listener() {
@Override
public void call(Object... args) {
synchronized (mWaitLock) {
tempObj.notifyAll(); //releasing the lock
}
}
});
}
}
tempObj
之后仅用于套接字IO连接阶段。
为什么有时会进入ANR状态?这个实施正确吗?