后台执行限制总结

后台限制的发展历程

前台定义

针对后台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权限
可以豁免后台启动Activity、后台启动FGS
  • 用户已向应用授予 SYSTEM_ALERT_WINDOW 权限
临时白名单

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

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
UniApp 是一个基于 Vue.js 的跨平台应用开发框架,可以同时开发运行在多个平台(如小程序、H5、App)的应用。对于 UniApp 的后台开发环境,主要包括以下几个方面: 1. 后端语言:UniApp 并不限制后端语言的选择,你可以根据自己的需求选择适合的后端语言,比如常见的有 Java、PHP、Node.js 等。 2. 数据库:后台开发通常需要与数据库进行交互,常见的关系型数据库有 MySQL、Oracle、SQL Server 等,非关系型数据库有 MongoDB、Redis 等。根据项目需求选择适合的数据库。 3. 后端框架:后端框架可以提供一些便捷的功能和工具,加速开发过程。比如 Java 的 Spring、PHP 的 Laravel、Node.js 的 Express 等,选择一个熟悉且适合你项目的后端框架。 4. 开发工具:根据选择的后端语言和框架,选择相应的开发工具。比如 Java 可以使用 Eclipse、IntelliJ IDEA 等,PHP 可以使用 PhpStorm、Visual Studio Code 等,Node.js 可以使用 Visual Studio Code、WebStorm 等。 5. 部署环境:将开发完成的后台代码部署到服务器上运行,可以选择云服务器、虚拟主机等。根据自己的需求和预算选择适合的部署环境。 总结来说,UniApp 的后台开发环境与常规的后台开发环境类似,需要选择后端语言、数据库、后端框架以及开发工具,并将代码部署到服务器上运行。根据个人的技术栈和项目需求进行选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值