Android远程服务启动和停止

时间:2012-12-19 17:20:58

标签: android service

我正在开发一个应用程序,它可以对服务器进行异步调用以获取通知。在主要活动中一切正常。现在有什么困扰我,我需要一个服务,当应用程序不活动时轮询通知(就像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>

但是服务没有停止,它继续工作。关闭主活动后,另一个服务实例生成并继续轮询。

我错过了什么吗? 或者这可能对远程服务有用​​,甚至还有其他类型的服务/管理器可用于此目的?

感谢您的帮助!

修改

问题澄清:是否可以从不同的活动(未启动服务)中停止远程服务?

1 个答案:

答案 0 :(得分:0)

尝试停止CloudAlarmsService服务:

Intent intent = new Intent();
intent.setClass(getApplicationContext(), CloudAlarmsService.class); 
getApplicationContext().stopService(intent);