0

我想从活动(如切换按钮)启动/停止服务,但它不会停止。

MainActivity.class

btnGoToTrack.setOnClickListener(new OnClickListener() {

   @Override
   public void onClick(View v) {
      Intent intent = new Intent(MainActivity.this, SendIntentService.class);
      boolean isServiceRunning = isServiceRunning(SendIntentService.class);

      if (isServiceRunning == false) startService(intent);
      else stopService(intent);
   }
});

检查服务是否在线:

private boolean isServiceRunning(Class<?> pClass) {
    ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
    for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
        if (pClass.getName().equals(service.service.getClassName())) {
            return true;
        }
    }

    return false;

问题是isServiceRunning总是让我返回 TRUE。我不知道为什么。

SendIntentService.class:

@SuppressLint("NewApi")
public class SendIntentService extends Service {

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {

        Log.e("D: ", "SERVICE STARTED !");
        return START_STICKY;
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        Log.e("D: ", "SERVICE DISABLED !");
    }

    @Override
    public IBinder onBind(Intent intent) {
        // TODO Auto-generated method stub
        return null;
    }
}
4

2 回答 2

1

“问题是 isServiceRunning 总是让我返回 TRUE。我不知道为什么。” 不应该是:“问题是 isServiceRunning 总是返回我 FALSE。我不知道为什么。”?

如果它总是返回 TRUE,它就不会启动服务......

您是否检查过 pClass.getName() 是否真的等于 service.service.getClassName()?

于 2013-07-01T13:16:09.567 回答
0

问题出在我的 AVD 上。我安装了几个版本(在开发应用程序时),我认为启动了多个服务。

我已从我的 AVD 中删除所有版本(设置 -> 应用程序 -> 卸载应用程序)并重新启动应用程序。现在它正在工作!

于 2013-07-01T13:38:44.590 回答