我有一个应用程序,其中包含两个活动和一个服务和一个接收器,服务用于始终获取位置更新,我将第一次在接收器中启动服务,我的要求是,我需要停止当我的应用程序处于前台(运行)时服务,当我的应用程序停止时我需要启动服务。在两个活动中,initActivity 是应用程序启动时启动的第一个活动,而 homegridActivity id 是第二个活动,我在 homegridactivity 中提供了退出应用程序的选项。下面是我启动服务和停止服务的代码。
class initActivity extends Activity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.app);
System.out.println("VANDROID service status inside oncreate of init" );
ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
if ("com.vaayoo.android.service.VLocationFetchService".equals(service.service.getClassName())) {
Intent intent = new Intent( VUiHelper.getInstance().getApplicationContext(), VLocationFetchService.class);
boolean result = ((Vandroid)VUiHelper.getInstance().getApplicationContext()).stopService(intent);
System.out.println("VANDROID service status" + result);
manager = null;
}
}
}
} //第二个Activity
Class HomeGridActivity extends Activity
{
protected void onDestroy() {
super.onDestroy();
System.out.println("Homegrid activity onDestroy called");
VUiHelper.getInstance().clearControlCache();
ActivityManager manager = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
if ("com.vaayoo.android.service.VLocationFetchService".equals(service.service.getClassName())) {
Intent intent = new Intent( VUiHelper.getInstance().getApplicationContext(), VLocationFetchService.class);
ComponentName compname =((Vandroid) VUiHelper.getInstance().getApplicationContext()).startService(intent);
System.out.println("COMPONENT NAME" + compname.toString() );
manager = null;
}
}
}
}
我在 initactivity 的 oncreate 中停止服务,并在 homegridActivity 的 ondestroy 中启动相同的服务,我面临的问题是,这只是第一次工作,如果我多次关闭并启动应用程序,服务不会停止开始,我发现该服务一直在运行。我已将该服务设为 start_sticky,因此在任何时候都不应该被 android 运行时杀死,我应该完全控制该服务以停止和启动。无法找出为什么它不能一直工作,为什么它只是第一次工作。我做错了什么?如何解决这个问题?是因为将服务设为 start_sticky 吗?