【发布时间】:2021-01-19 12:39:36
【问题描述】:
说明
WorkManager 库计划和警报以跟踪它是否被强制停止。这发生在 ForceStopRunnable 类中(另见:https://android.googlesource.com/platform/frameworks/support/+/a9ac247af2afd4115c3eb6d16c05bc92737d6305/work/workmanager/src/main/java/androidx/work/impl/utils/ForceStopRunnable.java),它将在 WorkManager 初始化期间运行。在某些三星设备上,这将触发 SecurityException,据我所知,当您的应用程序安排超过 500 个警报时,三星会抛出此异常。该应用程序没有充满警报,所以我认为FLAG_UPDATE_CURRENT 将在已取消版本的内存中保留一个旧实例。但我无法重现这一点,而且我也没有看到安排了多个警报副本。
仅在 SDK 28 上发生,在 SDK 29 上发生一些罕见的情况
问题
这里是否有其他人在使用 WorkManager 库时具有相同的经验并且知道如何重现此问题?
这个问题有解决办法吗?
崩溃日志
java.lang.SecurityException: at android.os.Parcel.createException (Parcel.java:1966) at android.os.Parcel.readException (Parcel.java:1934) at android.os.Parcel.readException (Parcel.java:1884) at android.app.IAlarmManager$Stub$Proxy.set (IAlarmManager.java:240) at android.app.AlarmManager.setImpl (AlarmManager.java:722) at android.app.AlarmManager.setExact (AlarmManager.java:571) at androidx.work.impl.utils.ForceStopRunnable.setAlarm (ForceStopRunnable.java:292) at androidx.work.impl.utils.ForceStopRunnable.isForceStopped (ForceStopRunnable.java:151) at androidx.work.impl.utils.ForceStopRunnable.forceStopRunnable (ForceStopRunnable.java:169) at androidx.work.impl.utils.ForceStopRunnable.run (ForceStopRunnable.java:101) at androidx.work.impl.utils.SerialExecutor$Task.run (SerialExecutor.java:91) at java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1167) at java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:641) at java.lang.Thread.run (Thread.java:764) Caused by: android.os.RemoteException: at com.android.server.SamsungAlarmManagerService.checkMaliciousAppLocked (SamsungAlarmManagerService.java:333) at com.android.server.AlarmManagerService.setImpl (AlarmManagerService.java:1758) at com.android.server.AlarmManagerService$2.set (AlarmManagerService.java:2100) at android.app.IAlarmManager$Stub.onTransact (IAlarmManager.java:92) at android.os.Binder.execTransact (Binder.java:739)
来源: https://github.com/minvws/nl-covid19-notification-app-android
【问题讨论】:
-
尝试安排 > 500 个作业,您应该能够重现它。查看源代码,文件 ExposureNotificationJob.kt 安排没有 ID 和 UPDATE/CANCEL 标志的作业。你真的打算这样做吗?这可能是安排太多工作的原因吗?
标签: android samsung-mobile android-workmanager securityexception