android7.0 点击reset app preferences,后台services关闭
来源:互联网 发布:淘宝的目标消费群 编辑:程序博客网 时间:2024/06/01 07:13
现象:
后台FMservice运行,进入settings---apps ---menu---reset app preferences 或者该应用--permissions,手动关闭权限,后台service自动关闭
提取的部分log
01-01 07:09:23.100 841 854 W PackageManager: Revoke runtime permission: android.permission.RECORD_AUDIO for package com.android.fmradio
01-01 07:09:23.130 841 854 I ActivityManager: Killing 3783:com.android.fmradio/u0a90 (adj 200): permissions revoked
01-01 07:09:23.130 841 854 D ActivityManager: handleAppDiedLocked: app = ProcessRecord{4850064 3783:com.android.fmradio/u0a90}, app.pid = 3783
01-01 07:09:23.130 841 854 D ActivityManager: cleanUpApplicationRecord -- 3783
01-01 07:09:23.130 841 854 W ActivityManager: Scheduling restart of crashed service com.android.fmradio/.FmService in 1000ms
从log就可以看到,是PackageManager检测到 com.android.fmradio应用权限发生变化,调用ActivityManager中的Killing,直接杀了Killing com.android.fmradio进程
PackageManagerService.java
public void revokeRuntimePermission(String packageName, String name, int userId) {
if (!sUserManager.exists(userId)) {
Log.e(TAG, "No such user:" + userId);
return;
}
Slog.w(TAG, "Revoke runtime permission: " + name + " for package " + packageName);
mContext.enforceCallingOrSelfPermission(
android.Manifest.permission.REVOKE_RUNTIME_PERMISSIONS,
"revokeRuntimePermission");
enforceCrossUserPermission(Binder.getCallingUid(), userId,
true /* requireFullPermission */, true /* checkShell */,
"revokeRuntimePermission");
final int appId;
synchronized (mPackages) {
final PackageParser.Package pkg = mPackages.get(packageName);
if (pkg == null) {
throw new IllegalArgumentException("Unknown package: " + packageName);
}
final BasePermission bp = mSettings.mPermissions.get(name);
if (bp == null) {
throw new IllegalArgumentException("Unknown permission: " + name);
}
enforceDeclaredAsUsedAndRuntimeOrDevelopmentPermission(pkg, bp);
// If a permission review is required for legacy apps we represent
// their permissions as always granted runtime ones since we need
// to keep the review required permission flag per user while an
// install permission's state is shared across all users.
/// M: CTA requirement - permission control
if (Build.isPermissionReviewRequired()
&& pkg.applicationInfo.targetSdkVersion < Build.VERSION_CODES.M
&& bp.isRuntime()) {
return;
}
SettingBase sb = (SettingBase) pkg.mExtras;
if (sb == null) {
throw new IllegalArgumentException("Unknown package: " + packageName);
}
final PermissionsState permissionsState = sb.getPermissionsState();
final int flags = permissionsState.getPermissionFlags(name, userId);
if ((flags & PackageManager.FLAG_PERMISSION_SYSTEM_FIXED) != 0) {
throw new SecurityException("Cannot revoke system fixed permission "
+ name + " for package " + packageName);
}
if (bp.isDevelopment()) {
// Development permissions must be handled specially, since they are not
// normal runtime permissions. For now they apply to all users.
if (permissionsState.revokeInstallPermission(bp) !=
PermissionsState.PERMISSION_OPERATION_FAILURE) {
scheduleWriteSettingsLocked();
}
return;
}
if (permissionsState.revokeRuntimePermission(bp, userId) ==
PermissionsState.PERMISSION_OPERATION_FAILURE) {
return;
}
mOnPermissionChangeListeners.onPermissionsChanged(pkg.applicationInfo.uid);
// Critical, after this call app should never have the permission.
mSettings.writeRuntimePermissionsForUserLPr(userId, true);
appId = UserHandle.getAppId(pkg.applicationInfo.uid);
}
killUid(appId, userId, KILL_APP_REASON_PERMISSIONS_REVOKED); //在这里直接kill appid所在的进程
}
- android7.0 点击reset app preferences,后台services关闭
- android7.0后台优化
- APP开发实战175-针对Android7.0及更高版本的后台优化方案
- android7.0+关闭wifi连接CA验证
- Android7.0运行app报SecurityException MODE_WORLD_READABLE
- 0801-APP-Preferences-from-xml
- 0805-APP-Preferences-from-code
- android7.0中webview点击链接无响应
- Android7.0点击Launcher的AMS应用启动流程
- Android7.0 App层实现多Camera同时打开
- Android7.0使用DownloadManager和FileProvider更新App
- Android ApiDemos示例解析(30):App->Preferences->Preferences from XML
- Android ApiDemos示例解析(31):App->Preferences->Launching preferences
- Android ApiDemos示例解析(34):App->Preferences->Preferences from code
- Android ApiDemos示例解析(35):App->Preferences->Advanced preferences
- Android ApiDemos示例解析(35):App->Preferences->Advanced preferences
- 拦截 Back 键,使 App 进入后台而不是关闭
- Android重复点击后退,退出app,后台继续运行
- TCP/IP详解学习笔记(13)-TCP坚持定时器,TCP保活定时器
- 第二次爬虫实战--知乎
- java程序在开发工具上运行正常,打包之后本地运行报错Attempt to refer to a unregistered pool by its alias '**'
- 一文读懂机器学习,大数据/自然语言处理/算法全有了……
- 用vs2013编译用vs2015写的memcached遇到的平台问题
- android7.0 点击reset app preferences,后台services关闭
- POJ
- ISO-OSI的七层协议经典架构
- java中IO流的知识点总结
- Sql Server之旅——第二站 理解万恶的表扫描
- jdk动态代理和cglib动态代理剖析
- MATLAB中unwrap函数
- socket字节序转换中,人能看懂和看不懂的
- JavaBean和jsp学习笔记