2016-09-21 11 views
0

ユーザーが自分のアプリケーションを開いたときにサービスを開始したいときや、サービスをバインドする必要があるアクティビティやユーザーがアプリケーションを閉じるときにサービスを停止する。アプリケーションが破棄されたときにサービスのバインドを解除する方法

質問はどこでサービスを停止できますか?私のアプリが開いているときに私のサービスが働きたい。

Application.onCreate()メソッドでサービスを開始しましたが、ApplicationにはonDestroy()メソッドがありませんでした。

ランチャーアクティビティ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) { 
    } 

} 
関連する問題