360手机卫士性能优化之路

Vincent

2017/09/16 发布于 技术 分类

360手机卫士性能优化之路

文字内容
1. 手机卫士性能优化之路 360手机卫士.刘刚
3. 遇到的问题 • 功能模块多-产品经理无尽需求 • 代码量大-埋坑、填坑 • 论坛轰炸-内存大、卡、慢 • 响应速度-各种工具信息收集,日志包
4. 如何解决 • 防患于未然-预防性能问题 • 了然于胸-实时性能监控 • 深入群众-性能问题诊断 • 及时响应-动态热修复技术
5. 防患于未然 代码检测工具 自动化分析 资源优化工具 APK构建检测
6. 代码检测工具 LINT 代码文件 LINT TOOL lint.xml Correctness Usability Security Accessibility Performance …
7. 代码检测工具 FINDBUGS 可配置过滤器 插件化框架 原生findbugs认为有问题
8. 代码检测工具 代码红线和安全检测 无限团队开发过程中必须遵守的准则和不能碰触的红线 UI UI线程的耗时操作 Dex加载 频繁查找资源 解压 频繁创建对象 数据延迟加载 过度刷新 Adapter复用 布局扁平 直接使用大图片 Perf 后台任务调度 Webview
9. 自动化分析 JENKINS平台 一个开源的持续集成平台 构建产品 工作空间 构建产 品 构建产 品 定时任务 产品库 代码分析 测试 代码库 报表和通知 Web控制台 打包 部署发 布
10. 自动化分析 设计实现 邮件和报表 Jenkins执行 代码分析任务 Beego Web服务 Beego ORM MySQL 已经实现 •Crash 报告自动分析 •Crash 问题的预警 •代码静态检测 •生成数据报表 •…...
11. 自动化分析 举例 输出
12. 自动化分析 Strict Mode Detect All 构建StrictMode的Apk UI遍历自动化测试 自动化分析 基准对比 发布结果
13. 资源优化 重复图片工具 图片压缩工具 资源混淆工具 核心法宝:制度
14. APK构建 强大的构建分析
15. 实时性能监控 静态埋点 性能监控 观察者App 性能分析
16. AspectJ重写器 介绍及应用 基于java的面向切面的编程语言 静态埋点:编译时期遥测,在编译出来的class字节码 文件中完成遥测 电量 流量 传感器 …
17. AspectJ重写器 举例—网络请求静态埋点 对每一次网络请求数据进行记录,提供可评估的数据指标。 拦截对象: org.apache.http.HttpHost org.apache.http.HttpResponses org.apache.http.HttpRequest org.apache.http.client.ResponseHandler org.apache.http.client.methods.HttpUriRequest org.apache.http.protocol.HttpContext java.net.URLConnection org.apache.http.client.HttpClient
18. AspectJ重写器 举例—网络请求静态埋点 UsrManager : ===== 2G/3G/4G ===== -----> IMEI :XXXXXXXXXXXX version: 6.2.1 wifi :false UpLoad :18294K DownLoad: 32042K http://qurl.f.360.cn/wdinfo.php -----> IMEI : XXXXXXXXXXXX version: 6.2.9 wifi :false UpLoad :33770K DownLoad: 14K http://msoftdl.360.cn/mobilesafe/cloudblock_v2/20160201103405/20160131073005_s.msz ==============================WIFI ==================================== -----> IMEI : XXXXXXXXXXXX version: 6.3.1 wifi :true UpLoad :169465K DownLoad: 29530K http://mvconf.f.360.cn/safe_update
19. 性能监控 进程冷热启动 各个线程卡慢监测 四大组件启动速度 异步处理性能监测
20. 进程的冷热启动 进程冷热启动 关键字: Context::startXXXX Context::bindXXXX Application::attach Application::onCreate Activity::onCreate CustomInstrumentation::callApplicationOnCreate service: exported? activity:exported? UI? provider:exported? receiver:exported?
21. 四大组件启动 举例—Activity的加载时间 关键字: ActivityThread Instrumentation CustomInstrumentation public void callActivityOnCreate(Activity activity, Bundle icicle) { //... //收集我们需要的activity信息。 long bTim = System.currentTimeMillis(); rTRunnable.setBeginTime(bTim , activity.getComponentName().getClassName()); super.callActivityOnCreate(activity, icicle); //activity绘制完成后,执行回调函数,用来记录时间 activity.getWindow().getDecorView().post(rTRunnable); //... }
22. 线程卡慢监控 采样时间发送检测消息 Handle::post Handle::dispatchMessage CustomInstrumentation::waitForIdle CustomInstrumentation:: waitForIdleSync public void CustomInstrumentation:: waitForIdle() { //... mMessageQueue.addIdleHandler(new Idler(recipient)); mThread.getHandler().post(new EmptyRunnable(t)); //... }
23. 异步处理的性能监控 异步处理静态埋点 拦截对象: Handle::post(Runnable r) Handle::postAtTime(Runnable r, long uptimeMillis) Handle::postAtTime(Runnable r, Object token, long uptimeMillis) Handle::postDelayed(Runnable r, long delayMillis) Handle::postAtFrontOfQueue(Runnable r) 关键点: 1、加入上下文32位整数; 2、Runnable对象执行后,计算时间值;
24. 观察者App Stalker • 监控应用的多个进程 • 进程的cpu、内存、电量、流量信息 • 系统全局的cpu、内存、电量信息 • 界面的帧率信息
25. 观察者App LeakCanary 检查Activity是否泄漏的问题,通过onDestroy方法检查, 存在泄漏,则会dump内存镜像,获取栈信息
26. 内存分析 内存 进程拆分 代码解耦 classes.dex 内存泄漏 静态变量 OOM 虚拟机 ART Dalvik
27. 内存分析 分析方法 。 Dalvik Heap Data adb shell kill -10 Debug.dumpHprofData DDMS dump hprof file hprof-conv HPROF
28. 内存分析 分析方法 。 meminfo maps smaps mem
29. 内存分析 分析方法 。
30. 磁盘分析 磁盘对于性能的影响 NAND Flash 读写操作Page单位 擦除操作Block单位 具体规则: ü ü ü 删除数据时,芯片将标记这些 Page 为闲置状态,但并不会立马执行擦除操作; 写入数据时,如果目前磁盘剩余空间充足,则由芯片指定 Block 后直接按 Page 为单位进行 写入即可; 写入数据时,如果目前磁盘剩余空间不足,为了获得足够的空间,磁盘先将某块 Block 的内 容读至缓存,然后再在该 Block 上进行擦除操作,最后将新内容与原先内容一起写入至该 Block;
31. 用户反馈 手机诊断检测用户设备性能 基本信息 自动分析耗电 双卡信息 分析屏幕密度 ROOT信息 生成内存镜像文件 网络信息 Method Tracing CPU/内存监控 …...
32. 用户反馈 手机诊断检测用户设备性能 && 利用push自动获取
33. 动态热修复 动态补丁技术 bu g Find Class Class A Class B Plugin A Plugin B Annotation Annotation Class A Class B Plugin patch Befor e After 1、插件版本 号 2、插件名 3、类名
34. 广告时间 360手机卫士 最轻 最快 最好玩 手机的守护神
35. QA 欢迎交流