アプリのアクティビティの1つがサービスを開始/バインドします(これもアプリの一部です)。どのアクティビティがアクティブであるかに関係なく、アプリ全体がフォアグラウンドにある限り、そのサービスを実行し続けたいと思います。ただし、アプリ全体が一時停止されたときにサービスが停止することを確認する必要があります(ホームボタン/戻るボタン)。
アクティビティレベルではなく、アプリケーションレベルでそれを行うにはどうすればよいですか?
アプリのアクティビティの1つがサービスを開始/バインドします(これもアプリの一部です)。どのアクティビティがアクティブであるかに関係なく、アプリ全体がフォアグラウンドにある限り、そのサービスを実行し続けたいと思います。ただし、アプリ全体が一時停止されたときにサービスが停止することを確認する必要があります(ホームボタン/戻るボタン)。
アクティビティレベルではなく、アプリケーションレベルでそれを行うにはどうすればよいですか?
最も簡単な方法は、各アクティビティの状態を追跡するシングルトンを作成することです。たとえば、例として1つのアクティビティのみを表示します。
public class ActivityStates {
private static ActivityStates ref = null;
private static int firstAct = ACTIVITY_GONE;
public static synchronized ActivityStates getInstance() {
if (ref == null) {
ref = new ActivityStates();
}
return ref;
}
public int getFirstAct() {
return firstAct;
}
public void setFirstAct(int arg) {
this.firstAct = arg;
}
}
..インポートできる静的定数を定義します
public static final int ACTIVITY_GONE = 0;
public static final int ACTIVITY_BACKGROUND = 1;
public static final int ACTIVITY_FOREGROUND = 2;
次に、各アクティビティにメソッドがあります
private void setActivityState(int state){
ActivityStates as = ActivityStates.getInstance();
as.setFirstAct(state);
}
次に、onResume()、onPause、onDestroy()で、これらのメソッドを入力するときのアクティビティの状態を設定できます。
setActivityState(ACTIVITY_FOREGROUND)
onDestroy()で
setActivityState(ACTIVITY_GONE)
次に、サービスで、または必要な場所で、getメソッドを使用して各アクティビティの状態を調べ、何をするかを決定できます。