我正在开发一个对服务器进行异步调用以获取通知的应用程序。在主要活动中一切正常。现在困扰我的是,我需要一个服务,当应用程序不活动时会轮询通知(就像 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>
但服务并没有停止,它继续工作。在我关闭主要活动后,会产生另一个服务实例并继续轮询。
有什么我错过了吗?或者这对于远程服务来说可能是一个不好的用途,或者甚至还有另一种类型的服务/管理器可以用于这种目的?
谢谢你的帮助!
编辑:
问题说明:是否可以从不同的活动(未启动服务)中停止远程服务?