测试发现应用申请位置权限,选择“仅本次使用时允许”后,am force-stop杀掉应用后再次启动应用,权限仍然是granted授权成功状态,分析aosp源码发现是有个延迟撤销授权机制:
关键源码位置
frameworks/base/services/core/java/com/android/server/pm/permission/OneTimePermissionUserManager.java
应用进程被杀后,默认要5000ms后才会撤回onetime授权状态(通过config可以修改这个long值)

流程:
android.permission.PermissionManager#startOneTimePermissionSession(java.lang.String, long, long, int, int)调用revokeAfterKilledDelayMillis值传的-1,通过PMS中转最终走到OneTimePermissionUserManager:
com.android.server.pm.permission.OneTimePermissionUserManager#startPackageOneTimeSession(@NonNull String packageName, int deviceId, long timeoutMillis,
long revokeAfterKilledDelayMillis)
内部new或者update PackageInactivityListener的参数,最终取值为DEFAULT_KILLED_DELAY_MILLIS = 5000




(基于Android16源码分析)

5399

被折叠的 条评论
为什么被折叠?



