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不管挂起的应用程序到底发生了什么,您说强制关闭应用程序会删除它设置的任何警报是正确的