我想从活动开始/停止服务(如切换按钮),但它不会停止。
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
总是让我回归正确。我不知道为什么。
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;
}
}
答案 0 :(得分:1)
“问题是isServiceRunning总是让我恢复正常。我不知道为什么。” 不应该是: “问题是isServiceRunning总是让我失误。我不知道为什么。”?
如果它总是返回TRUE,它将无法启动服务...
您是否检查过pClass.getName()是否真的等于service.service.getClassName()?
答案 1 :(得分:0)
问题在于我的AVD。我安装了几个版本(在开发应用程序时),我认为已经启动了多个服务。
我已从我的AVD(设置 - &gt;应用程序 - &gt;卸载应用程序)中删除了所有版本,然后重新启动了该应用程序。现在它正在运作!