fpsviewer一个能实时显示fps,一段时间的平均帧率,以及帧率范围占比,并能获取卡顿堆栈的可视化工具。侵入性低,通过在异步线程采样获取堆栈,无代码侵入,性能消耗可忽略,对性能监控项的异常数据进行采集和分析,整理输出展示相应的堆栈,从而帮助开发者开发出更高质量的应用。

常见分析、定位卡顿的方案

系统工具

1. TraceView

目前一般是用现在AndroidStudio里的cpu-profile工具或者TraceCompat.beginSection()生成trace日志,
准确性高,这种分析方式只适合定性分析,因为工具很消耗cpu,有很多假jank,非常影响性能,显示耗时和实际耗时偏差很大,平常开发过程中也不易用,不可能实时开着,没法查看fps。
阅读全文

Android的业务开发中。列表需求很很常见也很重要的部分,列表承载的信息多,涉及的的协议多,布局也多,尤其一些复杂的列表,不管是用ListView还是RecyclerView,使用不当会带来很多的性能问题和后期的维护问题,形成一套规范的,高性能的列表开发模式很有必要。

案例分析

用一些案例说明一下吧(只是用一些App里的截图来做类比,并不知其协议类型和实现方式)

类似的列表不容易解决的主要在两个方面:

  1. 先不管列表里每个Item的具体UI,首先列表是可通过下拉刷新和广播通知变化,数据应该也只能全量下发,更新频率可能特别高,列表的长度也可能很长比如几百条(一些聊天列表或者在线用户列表可能存在数据量更大的情况),如果过高频率的刷新很容易造成页面卡顿。 阅读全文

目前的问题

Handler的使用在Android日常开发中占用很大的比重,尤其在界面开发中,经常被用来做一些延迟执行的任务。但Handler带来的问题也很多,最常见的比如页面退出未执行的任务没有被移除导致内存泄漏,以及可能的由于界面已不存在而导致的崩溃。如下,如果不及时移除就可能造成上述问题。

1
2
3
4
5
6
mHander.postDelayed(new Runnable() {
@Override
public void run() {
//do something
}
},1000);

这些问题一般都比较容易想到,也容易解决,常用的方式是缓存一个Runnable变量在使用的类中,然后在页面生命周期结束移除

阅读全文
  • 第 1 页 共 1 页

SilenceDut

talk is cheap,here are my blog


Android engineer


广东,广州