我正在开发一款应用程序,该应用程序向服务器发出异步调用以获取通知。在主活动中,一切正常。现在困扰我的是,我需要一个服务,在应用程序不活动时轮询通知(就像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";
...
同时,在manifest 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>
但服务并没有停止,而是继续工作。当我关闭主活动时,另一个服务实例会生成并继续轮询。
我是否漏掉了什么? 或者这是一种不良使用远程服务的方式,甚至可以使用其他类型的服务/管理器来实现此目的?
感谢任何帮助!
编辑:
问题澄清:是否有可能从未启动服务的不同活动中停止远程服务?
Intent intent = new Intent();intent.setClass(getApplicationContext(), CloudAlarmsService.class); getApplicationContext().stopService(intent);
。 - ρяσѕρєя K