线上APM

线上APM

本文链接:https://blog.csdn.net/feather_wch/article/details/131692498

基本概念

1、APM是什么?

  • Application Performance Monitor

2、内存监控方案

  1. 手动GC:Matrix
  2. 阈值处理:KOOM

3、FPS监控方案

  1. Handler机制(Looper Printer接口)- 看消息处理速度
  2. IdleHandler(延迟操作)- 无事可做时,可以做FPS监控
  3. ANR监控 -
  4. 掉帧监控

4、IdleHandler有什么用?

  1. 适合延迟操作
    Looper.myQueue().addIdleHandler(new Message,IdleHandler){
    queueIdle()
    return true: 可以不断执行
    return false: 只执行一次
    }

5、 Glide展示Gif时,IdleHandler就是失效

FPS监控

6、FPS代码写在哪儿?

  1. onResume

7、FPS两种方案,区别是什么?

  1. Handler:消息监听,效果很好。没有性能问题。
  2. 编舞者:不断执行会掉帧,doFrame,线上影响性能

8、要看到每个方法的耗时

  1. hack手段:每个方法经过dalivk或者art的某个函数,不需要修改字节码。存在兼容性和安全性问题。
  2. 字节码插装,编译期间修改所有class文件中函数字节码,对所有函数前后打点插装

9、rabit-client;fps的不适合用了

  • 安卓11前 编舞者 mlock对象可以获取到fps指标。安卓十一反射被禁止,没办法使用。

10、FPS高 60帧/s 能代表不卡吗?

  1. FPS看平均,如果某一段时间集中掉帧,就会卡

11、如何计算开机到Activity首帧的时间?

  1. CP打发
  2. contentprovider中算时间,acrivity onWindowFovusChanged中算时间。
  3. 之间就是加载的时间。

内存泄漏

1、内存泄漏方案分两种

  1. Leakcanary主动gc:影响性能
  2. KOOM一套

以后学习内容

1、Tinker的so加载原理/流程 => dex加到数组前面
2、【时序数据库】
3、http dns

面试

1、讲到so,就要讲兼容性问题,写了一套自己的动态加载库(ReLink),讲原理和思路

2、错误日志,动态上传

  1. WorkManager
  2. 压缩,加密。

ReLinker集成和使用

1、so动态加载库 KeepSafe/ReLinker

  1. 解决什么问题?
  2. 解决so加载异常问题。UnsatisfiedLinkError(so没找到对应的库)
  3. 帮助重新link
  4. 优点:找so时,日志会回调出来。

2、UnsatisfiedLinkError

  1. so没找到对应的库
  2. 原因:兼容问题
  3. 向上是兼容的,向下是不兼容的。

3、厂商魔改ROM改的是什么?

  1. so加载的路径

4、so加载的路径有哪些?(三种)

5、ApplicationInfo

  1. nativeLibraryDir
  2. secondaryNativeLibraryDir - 备用目录,国内环境被改掉了

6、Relink原理

  1. 模拟su:需要root权限
  2. 删除so路径,杀死进程
  3. 出现UnsatisfiedLinkError异常

7、elf是什么?

  • 动态链接库,so做成二进制

8、Relink核心技术点

  1. 解析so二进制文件,获取so依赖属性
  2. 解决了依赖问题:
  3. 6.0以下存在so依赖,1个so依赖其他3个so。加载顺序固定;
  4. 7.0以上自动做

你可能感兴趣的:(Android,android)