2015-02-13 5 views
1

Я создаю связанный сервис для подключения сокетов. Это означает, что он создает длинное соединение для опроса и слушает мой сервер. Если пользователь закрывает приложение в диспетчере задач, моя служба убивает меня нет проблем с 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; 
     } 
    } 

} 
+0

Вы хотите убить службу, когда действие завершено? – Ramesh

+0

На самом деле, да, я хочу убить – Okan

+0

добавить это в ваш манифестный андроид: stopWithTask = "true" – Ramesh

ответ

0

У меня было нечто подобное некоторое время назад я решил эту проблему с помощью общих предпочтений (Примечание: Я не думаю, что это самый лучший ответ, но это решить мою проблему).

Я сохранил в настройках логическое значение для регистрации, когда я больше не нуждаюсь в службе, но потерял ссылку на нее.

public class YourService extends Service { 
    private YourService serv; 

    @Override 
    public void onCreate() { 
     // TODO Auto-generated method stub 
     super.onCreate(); 
     serv = this; 

Тогда Somehwere на вашем коде, что служба делает часто.

if(!sharedPref.getBoolean("TurnOffService", false)){ 
      serv.stopSelf(); 

    } 

Надеюсь, это поможет.

Смежные вопросы