0

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

4

1 回答 1

3

此方法返回 true 或 false 表示。当服务运行时返回 true 否则为 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));

    } 
于 2012-11-05T06:49:04.987 回答