美文网首页Android专题
Android性能优化总结

Android性能优化总结

作者: gczxbb | 来源:发表于2019-03-31 23:14 被阅读39次

    卡顿优化

    卡顿的原因
    1,页面复杂,绘制层级过深,启动时。
    2,页面切换时,前后台切换时。
    3,主线程处理复杂到数据了,数据处理占用cpu较高,主线程拿不到cpu时间片,内存增加gc频率过高。主线程无法即使处理页面刷新。
    Profile GPU Rendering,手机图形监测。
    TraceView,分析函数调用过程,可代码插入。startMethodTracing,生成trace文件。

    布局优化

    查看层级。减少层级,Layout Inspector,使用merge,ViewStub,布局复用

    过度绘制

    overDraw,clipRect方法。

    启动优化

    启动监测。
    线程初始化,少做事情。异步加载,延迟加载,用到时加载。

    刷新机制

    减少刷新次数,避免不必要刷新,缩小刷新区域,控制后台线程影响。

    动画优化

    优先考虑属性动画,重回次数少。


    内存优化

    对象引用,强若软虚
    自动装箱 autoboxing
    内存复用,有效利用系统自带资源,如通用字符串,颜色,动画和页面样式,既可以减小内存开销,也能缩小Apk包大小。
    ListView,视图复用。
    对象池。
    Bitmap对象复用,inBitmap字段。告知解码器使用已存在内存区域。不需要再次申请。3.0+。
    使用Arraymap减小内存开销
    枚举类型运行时,enum值生命力耗内存,使用影响性能,避免。
    Lrucache,最近最少使用缓存
    图片内存优化,位图格式,四种,空间和视觉效果平衡。
    insamplesize,加载内存压缩。
    inscaled indensity intargetdensity
    图片三级缓存


    Crash捕获

    Java虚拟机每个进程设置一个UncaughtExceptionHandler,实现该接口,并设置,在出现crash时,回调uncaughtException方法,获取到Throwable未捕获到异常,记录着crash日志信息,数据过大主动压缩,先保存本地,再次启动App时,网络正常时上报。
    Linux信号机制,监控系统异常和中断,当App异常时,内核将生成错误信号通知当前进程,在native层,App注册导致crash的信号量处理函数,即可捕获crash信号。


    ANR

    1,输入事件5s无响应。
    2,广播10s内无法处理完成。
    3,Service在20s内无法处理完成。
    ANR主要原因,主线程阻塞,cpu一直占用,主线程抢不到时间片。
    发生了ANR,会产生一个Logcat日志和文件trace,在data/anr/目录下。
    Logcat关键信息,ANR发生进程PID,具体类,类型原因Reason,发生前后的cpu使用情况,如果cpu使用量少,说明可能是主线程阻塞。
    在AndroidStudio可以分析trace文件,Analyze Stacktrace,查看Thread dump信息,看是哪个线程阻塞。


    任重而道远

    相关文章

      网友评论

        本文标题:Android性能优化总结

        本文链接:https://www.haomeiwen.com/subject/ohujvqtx.html