Android 高速公路 websocket 没有断开连接
Android autobahn websocket doesn't disconnect
我在我的应用程序中使用 websocket 来检查新消息。
在我的服务 class 中实现的 Websocket,当我想停止服务时(在 Activity 中使用 stopService),它应该调用 disconnect websocket,但是方法 onClose
没有被调用
这是一些代码:
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
start();
super.onStartCommand(intent, flags, startId);
return Service.START_STICKY;
}
@Override
public void onDestroy() {
Log.i("tag", "onDestroy service start");
Intent intent = new Intent(this, RepeatingAlarmService.class);
if (alarmManager != null) {
alarmManager.cancel(PendingIntent.getBroadcast(this, REQUEST_CODE, intent, 0));
}
mConnection.disconnect(); // this line doesn't work ???
super.onDestroy();
Log.i("tag", "service stopped");
}
private void start() {
final String uri = "ws://ws.blabla.com"
try {
mConnection.connect(uri, new WebSocketConnectionHandler(){
@Override
public void onOpen() {
Log.i("tag", "Socket open"); // this line work well
super.onOpen();
}
@Override
public void onClose(int code, String reason) {
Log.i("tag", "Socket closed " + String.format("code: %d, reason: %s", code, reason)); // this line doesn't been printed
}
super.onClose(code, reason);
}
@Override
public void onTextMessage(String payload) {
Log.i("tag", payload); // this line work well
super.onTextMessage(payload);
}
});
} catch(Exception ex) {
}
}
答案是:只使用最新版本的外部库。
在 gradle 构建文件中,我使用的是 Maven 存储库 "jitpack.io"
repositories {
maven {
url "https://jitpack.io"
}
}
我在 dependencies
部分写了这一行 compile 'com.github.tavendo:AutobahnAndroid:v0.5.2'
来告诉 gradle 他应该从 jitpack 存储库下载依赖项。
Github 上的最新版本是 0.5.2,但如果您从 github(而不是 jitpack.io)下载它,您会看到不同之处。
我在我的应用程序中使用 websocket 来检查新消息。
在我的服务 class 中实现的 Websocket,当我想停止服务时(在 Activity 中使用 stopService),它应该调用 disconnect websocket,但是方法 onClose
没有被调用
这是一些代码:
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
start();
super.onStartCommand(intent, flags, startId);
return Service.START_STICKY;
}
@Override
public void onDestroy() {
Log.i("tag", "onDestroy service start");
Intent intent = new Intent(this, RepeatingAlarmService.class);
if (alarmManager != null) {
alarmManager.cancel(PendingIntent.getBroadcast(this, REQUEST_CODE, intent, 0));
}
mConnection.disconnect(); // this line doesn't work ???
super.onDestroy();
Log.i("tag", "service stopped");
}
private void start() {
final String uri = "ws://ws.blabla.com"
try {
mConnection.connect(uri, new WebSocketConnectionHandler(){
@Override
public void onOpen() {
Log.i("tag", "Socket open"); // this line work well
super.onOpen();
}
@Override
public void onClose(int code, String reason) {
Log.i("tag", "Socket closed " + String.format("code: %d, reason: %s", code, reason)); // this line doesn't been printed
}
super.onClose(code, reason);
}
@Override
public void onTextMessage(String payload) {
Log.i("tag", payload); // this line work well
super.onTextMessage(payload);
}
});
} catch(Exception ex) {
}
}
答案是:只使用最新版本的外部库。
在 gradle 构建文件中,我使用的是 Maven 存储库 "jitpack.io"
repositories {
maven {
url "https://jitpack.io"
}
}
我在 dependencies
部分写了这一行 compile 'com.github.tavendo:AutobahnAndroid:v0.5.2'
来告诉 gradle 他应该从 jitpack 存储库下载依赖项。
Github 上的最新版本是 0.5.2,但如果您从 github(而不是 jitpack.io)下载它,您会看到不同之处。