Android项目性能优化
像一只小蜗牛
不要辜负了所有爱你的人
展开
-
自建APM之网络优化
网络优化纬度介绍正确认识:网络优化纬度:多维仅仅重视流量不够网络流量的消耗:精确整体均值掩盖单点问题网络相关监控:全面粗粒度监控不能帮助我们发现、解决深层次的问题纬度流量消耗一段时间流量消耗的精准度量,网络类型、前台后台监控相关:用户流量消耗均值、异常率(消耗多、次数多)完整链路全部监控(Request、Response),主动上报网络请求质量用户体验:请求速度、成功率监控相关:请求时长、业务成功率、失败率、Top失败接口其它公司成本:带宽、服务器数、CDN手机耗电原创 2020-11-11 18:14:02 · 239 阅读 · 0 评论 -
自建APM线程管理
线程调度原理剖析线程调度原理任意时刻,只有一个线程占用CPU,处于运行状态多线程并发:轮流获取CPU使用权JVM负责线程调度:按照特定机制分配CPU使用权线程调度模型分时调度模型:轮流获取、均分CPU时间抢占式调度模型:优先级高的获取,JVM采用android线程调度nice值- process中定义- 值越小,优先级越高- 默认是THREAD_PRIORITY_DEFAULT,0cgroup更严格的群组调度策略保证前台线程可以获取到更多的cpu注意点线程过多导致CPU频繁原创 2020-11-11 12:45:51 · 255 阅读 · 1 评论 -
自建AMP之内存优化
内存优化介绍及工具选择目录内存优化介绍优化工具选择背景介绍内存是大问题但缺乏关注压死骆驼的最后一根稻草内存问题内存抖动:锯齿状、GC导致卡顿内存泄漏:可用内存减少、频繁GC内存溢出:OOM、程序异常工具选择Memory Profiler实时图表展示应用内存使用量识别内存泄漏、抖动等提供捕获堆转储、强制GC以及跟踪内存分配的能力方便直观线下平时使用...原创 2020-11-10 18:08:13 · 209 阅读 · 0 评论 -
自建APM之卡顿优化
卡顿介绍及优化工具选择CPU ProfilerSystraceStrictMode背景介绍很多性能问题不易被发现,但是卡顿很容易被直观感受卡顿问题难以定位卡顿问题难在哪里产生原因错综复杂:代码、内存、绘制、IO?不易复现:当时场景强相关CPU Profiler图形展示执行时间、调用栈信息全面,包含所有线程运行时开销严重,整体都会变慢(带偏优化方向)TraceView和SystraceStrictMode严苛模式,Android提供的一种运行时检测机制方便强大,容易被忽略包原创 2020-11-10 16:39:57 · 366 阅读 · 0 评论 -
自建APM之布局优化
绘制原理Cpu负责计算显示内容Gpu负责栅格化(UI元素绘制到屏幕上)16ms发出VSync信号触发UI渲染大多数Android设备屏幕刷新频率:60Hz优化工具Systrace关注Frames正常:绿色圆点,丢帧:黄色或红色alerts栏LayoutInsepector层次结构screenShotPropertiesTableChoreographer获取FPS,线上使用,具备实时性Api16之后Choreographer.getInstance().postFrame原创 2020-11-10 08:45:44 · 204 阅读 · 0 评论 -
异步优化方案
异步优化详解创建线程,创建线程池Executors.newFixedThreadPool()//设置线程数量,参考AsyncTask问题1.任务必须执行在主线程当中(不符合异步要求)解决办法:把任务改造成可以在子线程中执行,或者把任务放到主线程执行问题2.异步任务结束时间晚于调用时机(需要在某个阶段完成)解决办法:使用java的CountDownLatch锁问题3:CPU密集型任务,IO密集型任务异步优化痛点1.代码不够优雅2.场景不好处理(依赖关系)3.维护成本高启动器流程代码原创 2020-11-09 18:39:57 · 335 阅读 · 0 评论 -
MAT工具介绍和使用
Hprof转换工具转换命令MAT可视化工具全面理解MAToverView1.Histogram 基于类分析 (直方图)列出class的实例,shallowsize,retainedsizegroupByPackageWith outGoing ReferenceWith incoming Reference2.Dominator_tree 基于实例分析3.OQL 对象查询语言4.Thread Overview 线程总数查看5.Top consumers原创 2020-11-09 17:43:58 · 1407 阅读 · 0 评论 -
自建APM之启动优化
优化背景8秒定律,打开一个网页加载的时间超过八秒。会有70%的用户流失现状分析启动时间测量adb方式测量adb shell am start -W -n 应用包名/Activity全路径名这个命令在不同手机下的输出不一样vivo X9iMI 8这种方式简单,适合我们线下使用。但是这种方式误差比较大。需要测量多次然后取平均值这里解释一下thisTime 打开当前页面耗时totalTime 打开所有页面耗时waitTime 冷启动简单讲app冷启动可以分为两个阶段第一阶原创 2020-11-09 18:56:27 · 319 阅读 · 0 评论 -
Android-AOP-生命周期无侵入记录
引入插件classpath 'com.android.tools.build:gradle:3.1.4'classpath 'com.hujiang.aspectjx:gradle-android-plugin-aspectjx:2.0.8'应用插件apply plugin: 'android-aspectjx'引入库 implementation 'org.aspectj:as...原创 2020-04-13 12:18:30 · 203 阅读 · 0 评论 -
学习:Android性能优化典范
android性能优化创建更快更优秀的android应用渲染机制、内存与GC、电量优化0)render performance大多数用户所感知的卡顿问题最重要的根源都是因为渲染性能Android系统无法及时完成复杂界面渲染操作Android系统每隔16ms发出VSYNC信号,触发UI渲染只有每次渲染成功,才能够达到流畅画面所需要的60fps的帧率,这也就意味着程序的大多数操作都必须在...原创 2020-01-06 14:53:27 · 273 阅读 · 0 评论