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 回答