极客时间Android高级开发教程笔记

1.引言

最近买了张绍文老师的安卓课程,没学习一章总有种拓展了自己知识的感觉,但是运用到实际工作中显得懵逼,索性本着了解的心态看看,记录下一些一些知识。张老师的课程链接:https://time.geekbang.org/column/article/70966

2.正题

应用崩溃有下面几种情况

  • java层面,可以通过Logcat 看到日志

  • jni native层面,这种崩溃一般都会在Logcat中显示 “信号量”,可以在data/tom文件下看到native 崩溃的日志

  • 低内存oom,或者被 low memory killer 干掉了

  • 线程数开启太多 (400个线程就出问题)

  • 文件句柄打开没关闭(800个就出问题)

3. 内存优化

  • apk体积的优化。一个apk占用的内存有以下几个点:


    极客时间Android高级开发教程笔记_第1张图片
    image
  • Bitmap优化

  • 内存泄露 java 内存泄露和native 内存泄露

4. 卡顿问题分析

卡顿问题最终都是反应在cpu上。通过以下命令可以快速看出那个线程cpu占用:

/proc/[pid]/stat             // 进程 CPU 使用情况
/proc/[pid]/task/[tid]/stat  // 进程下面各个线程的 CPU 使用情况
/proc/[pid]/sched            // 进程 CPU 调度相关
/proc/loadavg                // 系统平均负载,uptime 命令对应文件

卡顿分析工具:

Traceview,Nanoscope,Systrace,Simpleperf

5.卡顿监控

  • 帧率
    工具:Choreographer,Android Vitals

  • 生命周期方法
    Activity、Service、Receiver 组件生命周期的耗时和调用次数也是我们重点关注的性能问题。Activity 的 onCreate() 不应该超过 1秒,不然会影响用户看到页面的时间。Service 和 Receiver 虽然是后台组件,不过它们生命周期也是占用主线程的,也是我们需要关注的问题。

  • 线程监控

1.线程数量。需要监控线程数量的多少,以及创建线程的方式。例如有没有使用我们特有的线程池,这块可以通过 got hook 线程的 nativeCreate() 函数。主要用于进行线程收敛,也就是减少线程数量
2.线程时间。监控线程的用户时间 utime、系统时间 stime 和优先级。主要是看哪些线程 utime+stime 时间比较多,占用了过多的 CPU

你可能感兴趣的:(极客时间Android高级开发教程笔记)