Я создаю связанный сервис для подключения сокетов. Это означает, что он создает длинное соединение для опроса и слушает мой сервер. Если пользователь закрывает приложение в диспетчере задач, моя служба убивает меня нет проблем с this.But, когда пользователь нажимает кнопку «Назад», я вызываю метод activity.finish()
для закрытия приложения. Но с этим методом моя служба не убивает, она все еще подключена к серверу сокетов.Android не убивает связанную службу
Это нормально? И может ли это разрядить аккумулятор?
Моя служба:
public class SocketService extends Service {
//you need constants to tell servise and activity what you are sending a message for
public static final int REGISTER_CHAT_ACTIVITY = 1;
public static final int MESSAGE_RECEIVED = 2;
final Messenger mMessenger = new Messenger(new IncomingHandler());
Messenger chat;
private Socket socket;
@Override
public void onCreate() {
try {
socket = IO.socket("ip");
socket.on(Socket.EVENT_CONNECT, new Emitter.Listener() {
@Override
public void call(Object... args) {
}
}).on("connected", new Emitter.Listener() {
@Override
public void call(Object... args) {
}
}).on("message", new Emitter.Listener() {
@Override
public void call(Object... args) {
try {
chat.send(android.os.Message.obtain(null, MESSAGE_RECEIVED, args[0]));
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
//and add all the other on listeners here
socket.connect();
} catch (URISyntaxException e) {
e.printStackTrace();
}
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
if (socket != null) {
socket.disconnect();
socket.connect();
} else {
try {
socket = IO.socket("ip");
socket.connect();
} catch (URISyntaxException e) {
e.printStackTrace();
}
}
return START_STICKY;
}
@Override
public IBinder onBind(Intent intent) {
return mMessenger.getBinder();
}
class IncomingHandler extends Handler {
@Override
public void handleMessage(android.os.Message msg) {
switch(msg.what){
case REGISTER_CHAT_ACTIVITY:
chat = msg.replyTo;
break;
}
}
}
public class LocalBinder extends Binder {
SocketService getService() {
return SocketService.this;
}
}
}
Вы хотите убить службу, когда действие завершено? – Ramesh
На самом деле, да, я хочу убить – Okan
добавить это в ваш манифестный андроид: stopWithTask = "true" – Ramesh