Android marshmallow动态权限更改会杀死所有应用程序进程

时间:2015-11-02 23:00:29

标签: android android-permissions android-6.0-marshmallow

观察:手动更改Android应用程序的权限会终止此应用程序的所有进程。

过程:转到设置 - >应用选择应用和权限。禁用其中一个权限。 设备:运行Android Marshmallow 6.0的Nexus 6设备

当我从启动器启动应用程序时,它启动了在此应用程序的权限更改之前位于顶部的活动。这与我们通过从UI多任务菜单中刷出应用程序来终止应用程序进程时的行为不同。在这种情况下,首先创建启动器活动。 也就是说,为了使应用程序在更改权限后启动时能够正常工作,它不能依赖启动启动器活动。

这种预期行为是否适用于所有Android 6.0及更高版本设备的动态权限?为什么通过从UI多任务菜单中刷出应用程序进程来杀死应用程序时的行为有什么不同?

2 个答案:

答案 0 :(得分:15)

  

也就是说,为了使应用程序在更改权限后启动时能够正常工作,它不能依赖启动启动器活动。

多年来一直如此。例如,如果您的进程因内存不足而终止,但用户最近已经进入(例如,在过去的半小时内),那么当用户访问概览屏幕时(您称之为“UI多任务”)菜单“)并返回到您的应用程序,控件将返回到用户最后一次活动的新实例(即,已经位于BACK堆栈的顶部)。

  

这种预期行为是否适用于所有Android 6.0及更高版本设备的动态权限?

是。它也是所有以前的Android设备中的预期行为,对于您的流程已终止但您的任务仍未完成且最近的其他情况。

  

为什么通过从UI多任务菜单中刷出应用程序进程来杀死应用程序时的行为会有什么不同?

从概览屏幕中轻扫任务会删除该任务。因此,当用户尝试返回您的应用时,该任务无法重复使用(例如,通过主屏幕启动器图标)。

答案 1 :(得分:2)

我想杀人的理由如下。它是关于并发性的。系统可以选择3种可能的方法之一:

  1. 以静默方式撤消权限。该应用无法对此进行检查,因为在任何'检查'之间并且'使用'时刻仍然会发生撤销。

  2. 通知应用。这种通知必须由应用程序确认,这意味着它的线程不会再访问已禁用的API,系统现在可以关闭API。这很优雅,但对于没有经验的程序员来说很难编程。

  3. 要杀死该应用,请确保下次启动该应用时,会正确认识到该权限已被撤销。