Android AlarmManager启动的服务不会从活动中停止

Android AlarmManager启动的服务不会从活动中停止,android,Android,我设置了AlarmManager对象以启动服务。 AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); //context = getApplicationContext(); Intent alarmServiceIntent = new Intent(context, AlarmHandlingService.class); alarmServiceIntent.setFlags(I

我设置了AlarmManager对象以启动服务。

AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); //context = getApplicationContext();
Intent alarmServiceIntent = new Intent(context, AlarmHandlingService.class);
alarmServiceIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
alarmServiceIntent.putExtra("alarmId", _id); //_id is a "long" value
PendingIntent pi = PendingIntent.getService(context, (int)_id, alarmServiceIntent, 0); 
am.set(AlarmManager.RTC_WAKEUP, time, pi); 
AlarmHandlingService
onStart命令(…,…,…)
在必须工作时工作。没有任何问题:

public int onStartCommand(Intent intent, int flags, int startId)
{
    long alarmId = intent.getLongExtra("alarmId", -1);
    Intent someActivityIntent = new Intent(this, SomeActivity.class);
    someActivityIntent.putExtra("alarmId", alarmId);
    someActivityIntent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT | Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivity(someActivityIntent);
    return START_NOT_STICKY;
}
但是,当打开一个新活动(SomeActivity)并调用
stopService(…)
时,服务不会停止:

stopService(new Intent(context, AlarmHandlingService.class)); //context = getApplicationContext();
这是清单中我的服务类的声明:


我试着调试,只注意到当我调用
stopService

时,调用了
android.content.ContextWrapper
类的
registerReceiver(BroadcastReceiver,IntentFilter filter)
函数

stopService(new Intent(this, AlarmHandlingService.class));

从您的评论来看,在调用stopService时,您没有做任何事情

当您调用stopService时,它实际上会调用函数stopService()(这是在您的应用程序中完成的)

您必须使用onDestroy方法

public void onDestroy ()
在API级别1中添加

由系统调用以通知服务它已不再使用并且正在被删除。此时,服务应该清理它持有的任何资源(线程、注册的接收者等)。返回后,将不再有对该服务对象的调用,并且它实际上已死亡。 (不要直接调用此方法)

另一个问题是你没有呼叫任何东西来停止你的报警管理器


您必须调用了
AlarmManager

的方法,您的onDestroy()中有什么?我对onDestroy不做任何操作。停止服务后不是叫它吗?而且我的stopService根本没有被调用…@覆盖公共布尔stopService(意图名称){Log.e(标记,“服务已停止”);返回super.stopService(名称);}Aaaaaa!!!!非常感谢,NetStarter:)我将代码从stopService移动到onDestroy,现在它可以工作了:)哦,gr8它很有用,而且总是很受欢迎。我认为不调用cancel方法可能会有问题。我在停止服务之前提前调用了
cancel
。然后,只有我从活动中调用
stopService
。此外,我的服务的重写
stopService
方法中有一些函数,但从未调用过。我将代码从服务的
stopService
移动到了服务的
ondestory
,现在问题解决了:)再次感谢:)OP只是这样调用
stopService(新意图(上下文,AlarmHandlingService.class))