当前位置: 首页 > news >正文

进程保活机制

保活方式优点缺点说明
persistent

进程优先级(adj:-800)仅次于system_server(adj:-900)和native进程(adj:-1000),基本不存在被杀可能

  • 常驻进程过多会延长桌面启动的时间进而延长开机时间
  • 常驻进程无法被lmk杀掉,过多的常驻进程会占用大量内存
  • 设置为常驻进程的应用只能随系统升级,无法应用自升级
除非有充足的理由,否则不建议使用该保活方式

Backgorud Service+闹钟

  • 后台服务虽然有被杀的可能,但是配合闹钟仍可保证每隔一段时间拉起进程,实现另一种形式的保活,既保证对内存不产生压力也能实现保活目的
  • 闹钟实现:Alarm+PendingIntent
  • 进程拉起后只有10分钟的保活时间,在此之后系统会根据当前内存情况选择是否杀掉进程
  • crash或被杀后不能保证立即重启
  • 低内存时进程可能无法拉起
该方案适合执行阶段性任务的场景
JobScheduler+JobService
  • 进程优先级是250,设置setExpedited为true后优先级为225,远小于后台服务的800,意味着因为内存紧张被杀的概率极低
  • 既可执行长时间任务,也可间歇执行短时间任务
  • 用法简单
  • 进程不容易被杀死,容易造成内存浪费
  • crash或被杀后不能保证立即重启,系统根据内存情况在15分钟内重启
  • 不能精确控制何时启动进程
  • 极低内存时无法保活
该方案可以在大部分情况下实现进程保活
WorkManager
  • 基于JobScheduler实现,接口抽象级别更高,更易用
  • Android12 支持通过前台服务运行长时间Task
  • 同JobScheduler
该方案可以在大部分情况下实现进程保活
前台服务(Foreground Service)
  • 前台服务进程优先级(adj:200)相对较高,只有内存十分紧张时才会被杀
  • Android 12已不再允许从后台启动前台服务,前台服务必须从前台启动,使用场景限制大
  • 低内存时同样无法保活
  • 在AOSP中状态栏和通知栏有UI标识,用户可感知

该方案适用于后台音乐播放的场景

实际用法如下所示:Entering GarageMode之后开始执行JobScheduler任务

应用架构:数据层 - 使用 WorkManager 调度任务 - Android 开发者  |  Android Developers


http://www.mrgr.cn/news/80089.html

相关文章:

  • 深度学习中的多通道卷积与偏置过程详解
  • 零知识证明:区块链隐私保护的变革力量
  • 基于wifipumpkin3的AP伪造
  • Visual Studio 2022+CMake配置PCL1.14.1
  • vite打包失败 - out of memory
  • Vue.js 中,前端如何处理从后端返回的 Excel 文件流
  • vue3+setup使用rtsp视频流实现实时监控,全屏,拍摄,自动拍摄等功能(纯前端)
  • 富士相机基本参数学习
  • Python大数据可视化:基于Python的王者荣耀战队的数据分析系统设计与实现_flask+hadoop+spider
  • React 生命周期
  • TongWe7.0-东方通TongWeb控制台无法访问 排查
  • Tongweb8命令行使用收集(by lqw)
  • [SWPU 2019]漂流记的马里奥
  • Java并发编程实战读书笔记
  • 【h5py】 提取mat文件中的HDF5格式的数据
  • Git-安装与常用命令
  • QT数据库(二):QSqlQueryModel实现数据查询
  • Unity 制作一个视频播放器(打包后,可在外部编辑并放置新的视频)
  • 动手学深度学习---预备知识
  • 软考高级架构 —— 10.6 大型网站系统架构演化实例 + 软件架构维护