后台执行限制总结

news/2025/1/1 8:12:11/

后台限制的发展历程

前台定义

针对后台Service
procState <= PROCESS_STATE_IMPORTANT_BACKGROUND=7
针对后台启动Activity
procState <= PROCESS_STATE_BOUND_TOP=3
针对后台启动FGS/后台启动FGS的while-in-use权限
procState <= PROCESS_STATE_BOUND_FOREGROUND_SERVICE=5

限制时打印的异常log

后台限制运行Service

03-22 01:49:59.872 3463 3521 W ActivityManager: Stopping service due to app idle: u0a153 -1m7s689ms com.qiyi.video/com.iqiyi.im.service.PPMessageService

后台限制启动Service

09-13 10:30:40.633 1581 2603 W ActivityManager: Background start not allowed: service Intent { cmp=com.android.deskclock/.addition.resource.ResourceLoadService (has extras) } to com.android.deskclock/.addition.resource.ResourceLoadService from pid=14625 uid=10216 pkg=com.android.deskclock startFg?=false

后台限制启动activity

12-15 08:36:11.818 1000 2014 7701 I ActivityTaskManager: START u0 {act=android.intent.action.VIEW dat=snssdk1128://webview/… flg=0x10000000 cmp=com.ss.android.ugc.aweme/.app.DeepLinkHandlerActivity}
from uid 10116 from pid 8466 callingPackage com.miui.personalassistant
12-15 08:36:11.819 1000 2014 7701 W ActivityTaskManager: Background activity start [callingPackage: com.miui.personalassistant; callingUid: 10116; appSwitchState: 2; isCallingUidForeground: false; callingUidHasAnyVisibleWindow: false; callingUidProcState: BOUND_FOREGROUND_SERVICE; isCallingUidPersistentSystemProcess: false; realCallingUid: 10116; isRealCallingUidForeground: false; realCallingUidHasAnyVisibleWindow: false; realCallingUidProcState: BOUND_FOREGROUND_SERVICE; isRealCallingUidPersistentSystemProcess: false; originatingPendingIntent: null; allowBackgroundActivityStart: false; intent: Intent{ act=android.intent.action.VIEW dat=snssdk1128://webview/… flg=0x10000000 cmp=com.ss.android.ugc.aweme/.app.DeepLinkHandlerActivity }

后台启动的FGS限制使用while-in-use权限

07-15 18:08:27.172 1442 1458 W ActivityManager: Foreground service started from background can not have location/camera/microphone access: service com.xiaomi.discover/com.xiaomi.market.service.AppActiveStatService

后台限制启动FGS

12-17 01:14:55.156 1383 12145 W ActivityManager: Background started FGS: Disallowed [callingPackage: com.debug.loggerui; callingUid: 10102; uidState: SVC ; intent: Intent { cmp=com.debug.loggerui/.framework.DebugLoggerUIService }; code:DENIED; tempAllowListReason:; targetSdkVersion:31; callerTargetSdkVersion:31; startForegroundCount:0; bindFromPackage:null]

java.lang.RuntimeException: Unable to create service com.debug.loggerui.framework.DebugLoggerUIService: android.app.ForegroundServiceStartNotAllowedException: startForegroundService() not allowed due to mAllowStartForeground false: service com.debug.loggerui/.framework.DebugLoggerUIService

常用豁免方法

针对后台广播限制解决

  • 发送方发送显示广播
  • 发送方添加FLAG_RECEIVER_INCLUDE_BACKGROUND flag
  • 接收方使用动态注册方式

后台限制Service豁免

  • 系统、用户或临时休眠许可名单中

后台限制启动activity豁免

  • START_ACTIVITIES_FROM_BACKGROUND权限
  • SYSTEM_ALERT_WINDOW 权限
  • 应用中的某个服务被另一个可见应用绑定
  • 应用中的某个服务被另一个应用以BIND_ALLOW_BACKGROUND_ACTIVITY_STARTS flag绑定

后台限制启动FGS豁免

  • 申请START_FOREGROUND_SERVICES_FROM_BACKGROUND权限
  • 申请START_ACTIVITIES_FROM_BACKGROUND 权限
  • 申请SYSTEM_ALERT_WINDOW权限

后台启动FGS限制while-in-use权限使用

  • 申请START_ACTIVITIES_FROM_BACKGROUND 权限

通用豁免原因

可以豁免后台启动Activity、后台启动FGS、后台启动FGS的while-in-use权限

  • START_ACTIVITIES_FROM_BACKGROUND 权限
  • ROOT_UID/SYSTEM_UID/NFC_UID(SHELL_UID)等重要uid
  • 应用程序有可见窗口(isUidForeground)
  • 关于areBackgroundActivityStartsAllowed系列

可以豁免后台启动Activity、后台启动FGS

  • 用户已向应用授予 SYSTEM_ALERT_WINDOW 权限

临时白名单

android 8.0+后台Service限制
idle白名单(mDeviceIdleAllowlist)或临时白名单(mDeviceIdleTempAllowlist或mPendingTempAllowlist)
android 12+从后台启动FGS限制
mDeviceIdleExceptIdleAllowlist 或 mFgsStartTempAllowList


http://www.ppmy.cn/news/732201.html

相关文章

android 8.0+后台广播限制

如果应用注册为接收广播&#xff0c;则在每次发送广播时&#xff0c;应用的接收器都会消耗资源。 如果多个应用注册为接收基于系统事件的广播&#xff0c;则会引发问题&#xff1a;触发广播的系统事件会导致所有应用快速地连续消耗资源&#xff0c;从而降低用户体验。 为了缓解…

php+后台+限制+登录次数,THINKSNS取消后台登录密码错误次数限制的办法详解

在登录thinksns网站后台的时候&#xff0c;有些站长朋友会因为连续输错几次密码而被提示&#xff1a;“输入密码错误&#xff0c;您还可以是*次”&#xff0c;如果错误次数超过了限制的6次将会被锁定1个小时&#xff0c;这个措施也是为了保证网站后台安全而设计的&#xff0c;如…

linux如何后台执行程序?

一、使用场景 如果要自己的应用程序能够外网访问&#xff0c;比较常用的操作就是将服务部署到服务器&#xff08;也可以本机使用 花生壳/ngrok 等内网穿透工具&#xff0c;让服务能够被外网访问&#xff09;。部署服务登陆服务器会经常会用到xshell等终端工具&#xff0c;执行s…

Android O实现限制自启限制后台杀活方案

由 b178903294创建, 最后修改于12月 30, 2020 上回书说到android的powersave lowmemorykiller 等的后台清理机制&#xff0c;与系统如何保证应用不被杀掉的保活方案。我们为了自己的应用能够常驻后台提供了系统保活的机制。那么其他三防应用为了自己能够永生&#xff0c;各种手…

限制后台进程的个数

应用背景&#xff1a; 通常我们会限制后台进程的执行个数 实现方法&#xff1a; DATA: l_jobcount LIKE tbtcm-jobcount, l_jobname LIKE tbtcm-jobname, l_stepcount LIKE tbtcm-stepcount. DATA: l_tbtco LIKE tbtco. IF sy-batch X. “如果是后台执行…

关于使用系统定位持续后台定位的一点心得

使用系统自带定位&#xff0c;不难&#xff0c;难的是后台持续定位。最难解决的就是后台定位的持续性。 先理解一下进程的优先级&#xff1a;前台进程>可见进程>服务进程>后台进程>空进程。 当按下Home键或者打开其他应用时&#xff0c;就涉及到一个问题&#xff…

android模拟程序被杀死,Android模拟后台进程被杀

Android开发中&#xff0c;有时候我们需要测试下后台进程被杀&#xff0c;然后重新进入App时恢复现场的case。如果采用填充内存的方式&#xff0c;比较麻烦&#xff0c;下面介绍几种快速模拟后台进程被杀的方式&#xff1a; 方式1&#xff1a; 最简单的方法是在DDMS中点击”Sto…

高效管理 Linux 进程:如何后台执行程序、查看进程、终止任务

目录 前言一、nohup命令详解1-1、nohup命令介绍1-2、语法格式1-2-1、基础语法介绍1-2-2、执行脚本文件1-2-3、执行python文件1-2-4、拓展延申&#xff1a;在服务器上运行后台进程1-2-5、nohup和&的区别 二、进程查看2-1、jobs命令&#xff08;基本不用&#xff09;2-2、ps命…