3

通知のためにサーバーに非同期呼び出しを行うアプリを開発しています。メインアクティビティではすべてが正常に機能します。今、私を悩ませているのは、アプリがアクティブでないときに通知をポーリングするサービスが必要なことです(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>

しかし、サービスは停止せず、機能し続けます。メインアクティビティを閉じた後、サービスの別のインスタンスが生成され、ポーリングを続行します。

私が見逃しているものはありますか?それとも、これはリモートサービスの悪い使用法であるか、またはそのような目的で使用できる別のタイプのサービス/マネージャーがありますか?

助けてくれてありがとう!

編集:

質問の明確化:(サービスを開始しなかった)別のアクティビティからリモートサービスを停止することは可能ですか?

4

1 に答える 1

0

CloudAlarmsService次のようにサービスを停止してみてください。

Intent intent = new Intent();
intent.setClass(getApplicationContext(), CloudAlarmsService.class); 
getApplicationContext().stopService(intent);
于 2012-12-19T17:58:59.077 に答える