我正在开发一个应用程序,它可以对服务器进行异步调用以获取通知。在主要活动中一切正常。现在有什么困扰我,我需要一个服务,当应用程序不活动时轮询通知(就像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>
但是服务没有停止,它继续工作。关闭主活动后,另一个服务实例生成并继续轮询。
我错过了什么吗? 或者这可能对远程服务有用,甚至还有其他类型的服务/管理器可用于此目的?
感谢您的帮助!
修改
问题澄清:是否可以从不同的活动(未启动服务)中停止远程服务?
答案 0 :(得分:0)
尝试停止CloudAlarmsService
服务:
Intent intent = new Intent();
intent.setClass(getApplicationContext(), CloudAlarmsService.class);
getApplicationContext().stopService(intent);