我有一个应用程序,其中包含两个活动,一个服务和一个接收器,服务用于一直获取位置更新,我将首次在接收器中启动服务,我的要求是,我需要我的应用程序处于前台(运行)时停止服务,我需要在应用程序停止时启动服务。在两个活动中,initActivity是应用程序启动时启动的第一个活动,homegridActivity是第二个活动,我在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;
}
}
}
} //第二个活动
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;
}
}
}
}
我正在停止启动时oncreate上的服务并在homegridActivity的ondestroy中启动相同的服务,我面临的问题是,这只是第一次工作,如果我关闭并多次启动应用程序,服务没有停止和启动,我发现,该服务一直在运行。我已经将该服务作为start_sticky,因此不应该在任何时候被Android运行时杀死,我应该完全控制该服务停止和启动。无法找出它为什么不能一直工作,为什么它只是第一次工作。我做错了什么?如何排除故障?是因为将服务作为start_sticky?
答案 0 :(得分:2)
此方法返回true或false表示。当服务失败而不是reture时,否则为false。因此,当您使用此方法时,可以使用此方法。
private boolean isMyServiceRunning() {
ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
for (RunningServiceInfo service : manager
.getRunningServices(Integer.MAX_VALUE)) {
if ("packagename".equals(service.service
.getClassName())) {
return true;
}
}
return false;
}
然后检查一下。
if (isMyServiceRunning()) {
stopService(new Intent(A.this, MusicService.class));
}