1、问题描述:
Tv端安装带插件App(微视听)启动,短期时间端内导致CPU消耗过大,从而导致其他进程system_server、PakeageInstaller等进程响应慢,PakeageInstaller出现ANR;
2、问题分析:
微视听app启动后,执行插件(apk、dex、jar)文件classLoader加载,导致系统对apk、dex、jar进行优化,会触发dex2oat
进程对其进行优化,dex2oat默认启动的线程池数量为CPU核心数量,导致CPU被占满(adb shell top -m 8)可以查看进程使用cpu情况;
这个时刻,微视听申请用户授权,pageageInstaller程序弹窗显示,同一时刻运行的进程有(占用资源大的):dex2oat、system_server、微视听、pageageInstaller;
注意点:pageageInstaller授权通过system_server进程binder通讯,主线程被挂起
3、优化方案:
①pageageInstaller授权Binder通讯的代码使用线程调用,避免主线程被挂起
②dex2oat进程控制线程池数量,设置为CPU核心数量的一半;
art/dex2oat/dex2oat.cc line:507行
- thread_count_(sysconf(_SC_NPROCESSORS_CONF)),
+ thread_count_(sysconf(_SC_NPROCESSORS_CONF)/2),
方案②缺点:会导致apk在安装过程中,进行dex优化的过程变慢,从而安装时间边长
网友评论