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

use*_*467 27 android android-permissions android-6.0-marshmallow

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

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

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

这是所有Android 6.0+设备上具有动态权限的预期行为吗?为什么通过从UI多任务菜单中刷出应用程序进程来杀死应用程序时的行为有何不同?

Com*_*are 15

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

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

这是所有Android 6.0+设备上具有动态权限的预期行为吗?

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

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

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

  • @tbruyelle:"你知道在更改权限后是否有办法强制执行新任务?" - 没有具体的权限更改.如果不出意外,请检查你在每一个`的onCreate(顶部持有的权限)`(可能通过一个公共活动的基类),如果你失去了一些东西的关键,用`意图启动的切入点活动`标志清除任务,所以你的`requestPermissions()`调用是集中处理的. (6认同)
  • 我不明白为什么他们将任务保留在权限更改上.为什么不杀死进程并删除任务?它迫使我们检查应用程序中所需的所有权限,而我们可以只有一个入口点来请求它们(至少是关键的).您是否知道在更改权限后是否有办法强制执行新任务?我尝试混合各种活动配置,但我失败了...... (4认同)
  • @MiloRambaldi:"如果您尝试从设置中禁用存储权限并恢复应用程序,则不会终止应用程序" - 它肯定会杀死与该应用程序关联的所有进程.Instagram无法阻止这一点."很快,会显示一个白色背景;然后最近的活动出现在它离开的地方" - 听起来像正常的`savedInstanceState`处理,以及从磁盘或网络重新加载任何必要的数据. (3认同)