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

Android原生JobSchedulerContext内存泄漏导致设备重启的现象

一、现象:原生JobSchedulerContext内存泄漏占比

JobServiceContext内存泄露导致ServiceDispatcher也跟着一起内存堆积

二、现象日志:

内存泄漏的日志关键信息:ActivityManager: Unbind failed: could not find connection for android.app.LoadedApk$ServiceDispatcher$InnerConnection@492fb1,内存堆积现象

Unbind failed 现象:
// main日志
05-28 17:33:54.929  1629  1629 I vendor.qti.hardware.servicetrackeraidl-service: bindService is called for service : com.microsoft.office.outlook/com.evernote.android.job.JobRescheduleService and for client system
05-28 17:33:57.714  1629  1629 I vendor.qti.hardware.servicetrackeraidl-service: unbindService is called for service : com.microsoft.office.outlook/com.evernote.android.job.JobRescheduleService and for client system
// system日志
05-28 17:33:57.554  1828  8984 I ActivityManager: Process com.microsoft.office.outlook (pid 16394) has died: prcp TOP 
05-28 17:33:57.556  1828  8984 W ActivityManager: Scheduling restart of crashed service com.microsoft.office.outlook/com.evernote.android.job.JobRescheduleService in 1000ms for connection
05-28 17:33:57.717  1828  3089 W ActivityManager: blocked by firewall: from pid = 1828,  uid = 1000, accessing service com.microsoft.office.outlook/com.evernote.android.job.JobRescheduleService
05-28 17:33:57.718  1828  3089 D JobPowerPolicy: need unbind service while bind failed
05-28 17:33:57.728  1828  3089 W ActivityManager: Unbind failed: could not find connection for android.app.LoadedApk$ServiceDispatcher$InnerConnection@492fb1
05-28 17:33:57.734  1828  3089 W JobScheduler: Job didn't exist in JobStore: b5e537d #u0a231/2147480000 com.microsoft.office.outlook/com.evernote.android.job.JobRescheduleService
05-28 17:33:57.747  1828  3089 E JobScheduler.Concurrency: Error executing JobStatus{b5e537d #u0a231/2147480000 com.microsoft.office.outlook/com.evernote.android.job.JobRescheduleService u=0 s=10231 system stops=1 READY}相关分析如下
// 每当3方应用job服务满足预设值条件,触发Job 启动
JobSchedulerService.maybeRunPendingJobsLocked
JobConcurrencyManager.assignJobsToContextsLocked
JobConcurrencyManager.assignJobsToContextsInternalLocked
JobConcurrencyManager.startJobLocked // Slog.e(TAG, "Error executing " + jobStatus);
JobServiceContext.executeRunnableJob:mContext.bindServiceAsUser // bind和unbind没有成对,导致内存泄漏
ContextImpl.bindServiceAsUser
ContextImpl.bindServiceCommon
ActiveServices.bindServiceLocked()
ActiveServices.retrieveServiceLocked // blocked by firewall
LoadedApk.getServiceDispatcher // 3方应用service拉起来, 则ServiceDispatcher的对象堆积一次
LoadedApk.getServiceDispatcherCommon 

三、原因:

1. 重启原因是ServiceDispatcher发生了内存泄漏

2. ServiceDispatcher内存泄漏原因:LoadedApk中map.put(r, rd)和map.remove没有成对,即一直都是put导致内存堆积

3. LoadedApk中map.remove没执行原因:当Unbind失败时Job没有执行unBindService

四、解决方案:

解决方案同google的一个patch, 即当Unbind失败时Job新增执行unBindService操作

d8a414d342caef4ccadd2f88f289ca18e669319c - platform/frameworks/base - Git at Google (googlesource.com)

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • java中位运算在算法中的应用
  • Ubuntu2004编译VLC-QT(记录)(根据官方步骤来)
  • 【ES6新特性】介绍ES6新特性的内容,如var,Let,Const声明变量的区别,解构赋值的概念,字符串的扩展,数组的扩展,以及对象的扩展。
  • 大数据技术之 Flume概述、安装(1)
  • es映射配置(_mapping)
  • 【Node】【6】模块系统
  • python从入门到精通:异常操作、模块操作及包操作
  • Windows Docker 部署 Nginx 服务器
  • 初识QT:从创建到认识
  • Grove Vision AI V2之语音控制LED
  • python如何用pymodbus库进行modbus tcp通信解析
  • IO进程线程 240826作业
  • Graylog日志丢失解决方案
  • 人眼检测(单张图像)
  • 工作实战-项目压测记录
  • (ckeditor+ckfinder用法)Jquery,js获取ckeditor值
  • 2017 前端面试准备 - 收藏集 - 掘金
  • Computed property XXX was assigned to but it has no setter
  • extract-text-webpack-plugin用法
  • GraphQL学习过程应该是这样的
  • Java知识点总结(JDBC-连接步骤及CRUD)
  • Vue.js源码(2):初探List Rendering
  • 产品三维模型在线预览
  • 工作手记之html2canvas使用概述
  • 嵌入式文件系统
  • 使用putty远程连接linux
  • 深度学习之轻量级神经网络在TWS蓝牙音频处理器上的部署
  • k8s使用glusterfs实现动态持久化存储
  • 阿里云API、SDK和CLI应用实践方案
  • #我与Java虚拟机的故事#连载01:人在JVM,身不由己
  • (2024,LoRA,全量微调,低秩,强正则化,缓解遗忘,多样性)LoRA 学习更少,遗忘更少
  • (39)STM32——FLASH闪存
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (zt)基于Facebook和Flash平台的应用架构解析
  • (剑指Offer)面试题34:丑数
  • (强烈推荐)移动端音视频从零到上手(上)
  • (淘宝无限适配)手机端rem布局详解(转载非原创)
  • (转)清华学霸演讲稿:永远不要说你已经尽力了
  • .CSS-hover 的解释
  • .DFS.
  • .NET Core WebAPI中封装Swagger配置
  • .Net Core 微服务之Consul(二)-集群搭建
  • .NET WebClient 类下载部分文件会错误?可能是解压缩的锅
  • .NetCore 如何动态路由
  • .xml 下拉列表_RecyclerView嵌套recyclerview实现二级下拉列表,包含自定义IOS对话框...
  • @angular/cli项目构建--http(2)
  • @requestBody写与不写的情况
  • [AutoSAR 存储] 汽车智能座舱的存储需求
  • [C#]winform基于深度学习算法MVANet部署高精度二分类图像分割onnx模型高精度图像二值化
  • [C#]winform使用onnxruntime部署LYT-Net轻量级低光图像增强算法
  • [CLIP-VIT-L + Qwen] 多模态大模型源码阅读 - 视觉模型篇
  • [cocos2d-x]关于CC_CALLBACK
  • [Codeforces] number theory (R1600) Part.11
  • [C语言]一维数组二维数组的大小
  • [idea]关于idea开发乱码的配置