2016-09-21 5 views
0

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

Вопрос в том, где я могу прекратить обслуживание. Я хочу, чтобы моя служба работала, когда мое приложение открыто.

Я запускаю услугу в методе Application.onCreate(), и я нашел, что нет onDestroy() метода в Application.

И я попытался остановить его в активности запуска onDestroy, но я не думаю, что это хороший способ, потому что система будет восстанавливать активность запуска при низкой памяти.

+0

«Я хочу, чтобы запустить службу, когда пользователь открывает мое приложение, некоторые из моей деятельности необходимо связать службу, а когда пользователь закрывает мое заявление, я остановить службу» - то, что является предоставление услуг вы, что вы не могли обработать какой-то обычный объект Java? – CommonsWare

+0

Я хочу поддерживать TCP-соединение с сервером, когда приложение открыто, для некоторых действий требуется сокет для отправки сообщения. Я думаю, что это работа для службы, я пока не могу найти другой способ сделать это. –

+1

«Я не могу найти другой способ сделать это до сих пор» - используйте обычный Java-объект в виде одноэлементного «AppConnectionManager» или чего-то еще. Опять же: почему это должно быть услугой? – CommonsWare

ответ

0

Что делать, если вы начали и остановили свое обслуживание в зависимости от количества выполняемых операций? Вот пример.

public class MyApplication extends Application implements Application.ActivityLifecycleCallbacks { 

    private int startedActivitiesCount = 0; 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     registerActivityLifecycleCallbacks(this); 
    } 

    private void onAppStart() { 
     // Start service 
    } 

    private void onAppQuit() { 
     // Stop service 
    } 

    @Override 
    public void onActivityCreated(Activity activity, Bundle bundle) { 
     startedActivitiesCount++; 
     if (startedActivitiesCount == 1) { 
      onAppStart(); 
     } 
    } 

    @Override 
    public void onActivityDestroyed(Activity activity) { 
     startedActivitiesCount--; 
     if (startedActivitiesCount == 0) { 
      onAppQuit(); 
     } 
    } 

    @Override 
    public void onActivityStarted(Activity activity) { 
    } 

    @Override 
    public void onActivityResumed(Activity activity) { 
    } 

    @Override 
    public void onActivityPaused(Activity activity) { 
    } 

    @Override 
    public void onActivityStopped(Activity activity) { 
    } 

    @Override 
    public void onActivitySaveInstanceState(Activity activity, Bundle bundle) { 
    } 

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