通知のためにサーバーに非同期呼び出しを行うアプリを開発しています。メインアクティビティではすべてが正常に機能します。今、私を悩ませているのは、アプリがアクティブでないときに通知をポーリングするサービスが必要なことです(GMailストックアプリのように)。したがって、次のようなメインアクティビティonStop関数の別のプロセスでリモートサービスを開始します。
@Override
public void onStop() {
super.onStop();
if(prefs.getBoolean(OPTIONS_KEY_SERVICE, false)) {
startServiceIntent = new Intent(CloudAlarmsService.MY_SERVICE);
Bundle b = new Bundle();
b.putStringArray("duidCodes", duidCodes);
startServiceIntent.putExtras(b);
Log.d("SSE_SERVICE", "Starting Service");
startService(startServiceIntent);
}
}
正常に動作します。アクティビティが閉じられた後に通知が届きます。ここで、アクティビティの開始時にリモートサービスを停止したいと思います(したがって、アクティビティとサービスポーリングサーバーを同時に使用することはありません)。私はこのようにします:
@Override
public void onResume() {
super.onResume();
stopService(new Intent(CloudAlarmsService.MY_SERVICE));
Log.d("SSE_SERVICE", "Stopping service");
}
CloudAlarmsService.MY_SERVICEは、私のサービスクラスの文字列です。
public class CloudAlarmsService extends Service {
public static String MY_SERVICE = "cloudindustries.alarms.service.BACKGROUND_SERVICE";
...
また、マニフェストxmlで次のように宣言されています。
<service android:process=":alarms_poller" android:name=".CloudAlarmsService">
<intent-filter android:label="@string/serviceStopService">
<action android:name="cloudindustries.alarms.service.BACKGROUND_SERVICE" />
</intent-filter>
</service>
しかし、サービスは停止せず、機能し続けます。メインアクティビティを閉じた後、サービスの別のインスタンスが生成され、ポーリングを続行します。
私が見逃しているものはありますか?それとも、これはリモートサービスの悪い使用法であるか、またはそのような目的で使用できる別のタイプのサービス/マネージャーがありますか?
助けてくれてありがとう!
編集:
質問の明確化:(サービスを開始しなかった)別のアクティビティからリモートサービスを停止することは可能ですか?