Android AlarmManager在应用程序销毁时被杀死

Android AlarmManager在应用程序销毁时被杀死,android,alarmmanager,repeat,Android,Alarmmanager,Repeat,我有以下问题:我在onCreate中注册了我的报警管理器,现在它每分钟都会执行一次但是如果我通过Android taskmanager关闭应用程序(因此应用程序状态为解除锁定),则AlarmReceiver停止执行。为什么? 我的代码: 报警接收器 public class AlarmReceiver extends WakefulBroadcastReceiver { private AlarmManager mAlarm; private PendingIntent mAlarmInten

我有以下问题:我在
onCreate
中注册了我的报警管理器,现在它每分钟都会执行一次但是如果我通过
Android taskmanager
关闭应用程序(因此应用程序状态为
解除锁定
),则
AlarmReceiver
停止执行。为什么?

我的代码:

报警接收器

public class AlarmReceiver extends WakefulBroadcastReceiver {

private AlarmManager mAlarm;
private PendingIntent mAlarmIntent;

@Override
public void onReceive(Context context, Intent intent) {
    Intent service = new Intent(context, PortalPullService.class);

    startWakefulService(context, service);
}

public void setAlarm(Context context) {
    mAlarm = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
    Intent intent = new Intent(context, AlarmReceiver.class);
    mAlarmIntent = PendingIntent.getBroadcast(context, 0, intent, 0);

    int interval = context.getResources().getInteger(R.integer.update_interval_in_mins) * 60 * 1000;

    mAlarm.setInexactRepeating(
            AlarmManager.ELAPSED_REALTIME_WAKEUP,
            SystemClock.elapsedRealtime() + interval,
            interval,
            mAlarmIntent);

    ComponentName reciever = new ComponentName(context, AlarmBootReceiver.class);
    PackageManager pm = context.getPackageManager();

    pm.setComponentEnabledSetting(reciever,
            PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
            PackageManager.DONT_KILL_APP);
}

public void cancelAlarm(Context context) {
    if(mAlarm != null) {
        mAlarm.cancel(mAlarmIntent);
    }

    ComponentName reciever = new ComponentName(context, AlarmBootReceiver.class);
    PackageManager pm = context.getPackageManager();

    pm.setComponentEnabledSetting(reciever,
            PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
            PackageManager.DONT_KILL_APP);
}
}
PullService

public class PortalPullService extends IntentService {

private static final String LOG_TAG = "PortalPullService";

public PortalPullService() {
    super(LOG_TAG);
}

@Override
protected void onHandleIntent(Intent intent) {


    //TODO make request to ** check if new Infos are available, then send notification

    Helper.sendNotification(this, "Test", "Testnotification"); //My test if this works

    AlarmReceiver.completeWakefulIntent(intent);
}

}
AndroidManifest.xml

<receiver android:name=".PortalUpdate.AlarmReceiver" />

<service
        android:name=".PortalUpdate.PortalPullService"
        android:exported="false" />   

通过
new AlarmReceiver().setAlarm(此)注册接收器

我搜索了很多问题,但找不到答案。。。我不知道哪里是我的错


提前感谢;)

因为计划的
pendingent
是与应用程序关联的令牌,如果应用程序被强制终止、停止或休眠,系统将删除它。当用户再次启动你的应用程序时,你可以在
onResume
onCreate
中再次设置它。

好的,在华为上安装你的应用程序的调试版本是个问题

因为您可以在华为禁用后台服务,而华为不认为您的应用程序的调试版本是正确的应用程序,所以它会破坏所有服务,可能是出于安全原因


正确安装它对游戏商店有帮助

是的,在我的华为上,它被杀死了……”“但是如果我通过Android taskmanager杀死应用程序”——也许华为修改了taskmanager,使其执行强制停止,而不是正常的进程终止。如果是这样,你对此无能为力。您可以使用
adb shell dumpsys alarm
在“杀死应用程序”之前和之后检查计划的报警。@commonware但我的WhatsApp服务不会被破坏。这不可能,还是我错了?你不是WhatsApp的开发者。您不知道WhatsApp是如何实现的。不要担心WhatsApp。担心你的应用程序。使用adb shell dumpsys alarm
查看当您“杀死应用程序”时,您的报警是否被删除。然后,使用adb shell dumpsys alarm查看当进程被简单终止时,您的报警是否被删除(例如,通过Android Studio中的Android监视器工具)。这将大大有助于隔离问题的根源。这是预期的行为。此外,这也是用户想要的。等待
AlarmManager
不会主动向用户传递价值。如果你不打算听从我的建议,并试图追踪你的警报是否被删除,这是你的决定。但是如果我想要一个服务,即使应用程序被销毁,也能每分钟检查一次更新,我该如何处理?(例如WhatsApp)如果使用START_STICKY,则从最近的任务中注销应用程序不会阻止服务再次启动。然而,如果您使用任务杀手或休眠应用程序,服务将停止。服务Whatsapp在休眠或“终止”时也会停止。系统不会删除挂起的内容。这就是它的目的。欢迎您设置一个挂起的应用程序,然后将其休眠。@Piyus不管挂起的应用程序到底发生了什么,您说强制关闭应用程序会删除它设置的任何警报是正确的