Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 应用程序关闭时AlarmManager如何工作_Android - Fatal编程技术网

Android 应用程序关闭时AlarmManager如何工作

Android 应用程序关闭时AlarmManager如何工作,android,Android,我的应用程序集pendingIntent位于AlarmManager中。我知道pendingIntent将保存在AlarmManager中,并且pendingEntRecord保存在ActivityManager服务中。因此,当我的应用程序 如果被终止,它与AlarmManager调用ActivityManager服务do无关 未来的penddingIntent。但事实并非如此。我发现logcat将输出日志 03-13 09:32:43.149 462-475/? I/AlarmMan

我的应用程序集
pendingIntent
位于
AlarmManager
中。我知道
pendingIntent
将保存在
AlarmManager
中,并且
pendingEntRecord
保存在
ActivityManager服务中。因此,当我的应用程序
如果被终止,它与AlarmManager调用
ActivityManager服务
do无关 未来的
penddingIntent
。但事实并非如此。我发现
logcat
将输出日志

03-13 09:32:43.149      462-475/? I/AlarmManager﹕ Remove <my package> from mIntentHisRW
03-13 09:32:43.159      462-475/? I/AlarmManager﹕ record removed
03-13 09:32:43.149 462-475/?I/AlarmManager﹕ 从MintentISRW中删除
03-13 09:32:43.159      462-475/? I/AlarmManager﹕ 删除记录
我就是找不到源代码中的日志是在哪里生成的。当应用程序被杀死时,
AlarmManager
是如何工作的


提前感谢。

如果您的应用程序被用户杀死(在设置中停止应用程序),Android操作系统将认为用户希望此应用程序不再工作。因此Android操作系统将删除AlarmManager记录


我也没有找到此日志,可能是您的ROM开发人员添加的。

在使用adb检查您的报警是否持续在AlarmManager中时,您能否重现此问题?杀掉一个应用程序应该不会对它产生任何影响。杀掉应用程序后,我发现我的应用程序集的警报消失了。我找到了为什么可以看到以下评论的原因。谢谢,是的,你(@tianwei)是的。被用户终止和被崩溃停止之间有些不同。我查看了源代码ActivityManagerService.java,并看到当被用户终止时,将调用方法forceStopPackageLocked,该方法广播Intent.ACTION\u PACKAGE\u重新启动,AlarmManagerService接收并删除警报。但是如果被崩溃杀死的AlarmManager将来将继续使用PenddingIntent。是的,在broadcastIntentLocked方法中,它包含以下语句:if(curt.activityInfo.packageName.equals(skipPackage)){receivers.remove(it);it--;NT--;}此方法将由forceStopPackageLocked调用,该方法由forceStopPackageLocked或clearApplicationUserData调用。下面是官方文档的广播操作:用户已重新启动一个包,其所有进程都已被终止。与之相关的所有运行时状态(进程、警报、通知等)应删除。请注意,重新启动的程序包未接收此广播。数据包含程序包的名称。“---因此,如果我们希望保持警报,如何在此广播上再次设置警报?您应该在应用程序首次声明时重置警报。就像您第一次安装警报一样。