我们开发了一个Android,在测试Android11Beta的同时,我们发现了一个似乎还没有报告的问题。
在Android 11中,已经为位置、麦克风和相机权限引入了新的一次性权限.使用此选项,一旦用户离开应用程序,权限就会被撤销(可以找到更多详细信息,这里)。
问题是,在短时间内,当应用程序不再处于前台时(没有必要杀死应用程序,只需最小化就足够了),所有未来计划中的警报或作业都会被删除,就像应用程序被强行杀死一样。只有在这个级别的权限下才会发生这种情况。拒绝或提供其他级别保持原计划的警报或作业,如预期。我们已经在Beta 3构建中复制了这一点,在一个带有RPB3.200720.005构建号的Pixel 2仿真器中。在这个存储库中,您可以找到一个用于复制bug的示例应用程序。
这个单一的活动应用程序计划在接下来的5分钟内发出警报,并在5-6分钟内触发一项任务。屏幕有三个按钮,每个按钮触发相应的权限请求。JobService和BroadcastReceiver类只记录它们已被触发。这种情况可在采取下列步骤后再发生:
adb shell dumpsys alarm | grep com.example.permissions.app和adb shell dumpsys jobscheduler | grep com.example.permissions.app,以确保警报和作业都被调度;adb shell dumpsys alarm | grep com.example.permissions.app和adb shell dumpsys jobscheduler | grep com.example.permissions.app。报警器和作业将不再出现;你们中有谁遇到过类似的情况?我们的预感是,为了撤销一次性权限,应用程序进程正在以某种方式被终止,从而导致这些副作用。我们还在Android问题跟踪器上提交了一个问题,如果谷歌回答了这个问题,我们会更新这篇文章。
发布于 2020-09-14 05:38:01
这个问题“解决了”。问题实际上是在Android关闭应用程序后,当权限被撤销时,Android Studio调用了一个强制关闭。
谷歌的实际反应是:
非常感谢您提出了这个问题,并提供了示例代码来再现它。经过进一步研究,我们发现这是由于Android和通过"Run“命令启动的应用程序之间的交互。 具体来说,当Android撤销应用程序的许可时,它会扼杀该应用程序的进程。我们发现,当Android观察到它发布的应用程序不再运行时,它会通过亚行发送一个强制停止命令。 如果应用程序是通过启动程序启动的(包括在连接到Android的模拟器中),则应用程序不会强制停止,警报和作业都会按预期运行。
因此,除了在开发阶段之外,它不会引起其他问题。有关更多信息,请查看问题中链接的Android问题跟踪器。
发布于 2022-01-26 11:54:21
我知道我的问题与这个问题不完全一样,但当我点击这个一次性许可时,我在谷歌地图上的android 11中也遇到了这个问题。我注意到,如果你离开你的应用程序在后台1分钟,然后回去,应用程序进程被扼杀了。
我在取景器中有两个SupportMapFragment,并在TabLayout中连接,每次发生这种情况,视图都会被重新创建,但是处于视图器当前位置的片段没有被正确地重新创建。
对于那些遇到这种情况的人,您必须更改您的流,只使用一个SupportMapFragment而不是两个。这样,您的地图片段将正确地重新创建。我只是根据标签当前位置来处理地图状态和标记。
https://stackoverflow.com/questions/63511570
复制相似问题