明确停止服务

时间:2012-11-05 06:41:09

标签: android service

我有一个应用程序,其中包含两个活动,一个服务和一个接收器,服务用于一直获取位置更新,我将首次在接收器中启动服务,我的要求是,我需要我的应用程序处于前台(运行)时停止服务,我需要在应用程序停止时启动服务。在两个活动中,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?

1 个答案:

答案 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));

    }