• App性能优化


    性能优化:

     用户体验的性能主要总结为4个类别:

    • 流畅:使用时避免出现卡顿,响应速度快,减少用户等待的时间,满足用户期望。
    • 稳定:减低crash率和ANR率,不要在用户使用过程中崩溃和无响应。
    • 省点、省流量:节省流量和耗电,减少用户使用成本,避免使用时导致手机发烫。
    • 安装包小:安装包小可以降低用户的安装成本。

    卡顿优化:

     卡顿的场景有很多,可分为4类:UI绘制、应用启动、页面跳转和事件响应,这4种卡顿的原因可为2大类:

    • 界面绘制:绘制的层级深、页面复杂、刷新不合理,这些原因卡顿的场景更多出现在UI和启动后的初始界面以及跳转页面的绘制上。
    • 数据处理:导致卡顿的原因是数据处理量太大,可分为如下3种情况

       (1)、数据处理UI线程。
       (2)、数据处理占用CPU高,导致主线程拿不到时间片。
       (3)、内存增加导致GC频繁,从而引起卡顿。
    优化建议:

     1.布局优化:主要通过减少层级、测量、绘制时间和提高复用性方面入手,总结如下

    • 减少层级:合理使用RelativeLayout和LinerLayout,合理使用Merge。
    • 提高显示速度:使用ViewStub,它是一个看不见、不占布局位置、占用资源非常少的视图对象。
    • 布局复用:通过<include>标签提高布局复用
    • 减少测量:尽可能少用wrap_content,它会增加布局measure时计算成本,在已知宽高为固定值时,不用wrap_content。
    • 删除控件中无用的属性  

     2.过度绘制:屏幕上的某个像素在同一帧时间内被绘制多次,从而浪费多余的CPU以及CPU资源,避免过度绘制方法如下:

    • 布局上优化:移除XML中非必要的背景、Window默认的背景、显示占位背景图片。
    • 自定义View优化:使用canvas.clipRect()帮助系统识别可见的区域,只有这个区域内才会被绘制。

     3.启动优化:优化启动逻辑,提高应用的启动速度。启动主要完成UI布局、绘制和数据准备,因此启动速度优化需要以下三个过程:

    • UI布局:应用一般都有闪屏页,优化闪屏页的UI布局,可通过Profile GPU Rendering检测丢帧情况
    • 加载逻辑优化:采用分布加载、异步记载、延期加载策略提高应用启动速度。
    • 数据准备:数据初始化分析,记载数据可用线程初始化等策略。

     4.合理刷新:数据变化,需要刷新页面展示新的数据,频繁刷新会增加资源开销,并且可能导致卡顿,合理刷新注意以下几点:

    • 尽量减少刷新次数。
    • 尽量避免后台有高的CPU线程运行。
    • 缩小刷新区域

     5.动画优化:有些情况下,实现动画效果时,可以用硬件加速方式提供流畅度。

    优化内存:

     没有内存泄露,并不意味内存就不需要优化,Android系统对每个应用进程都分配有限的堆内存,因此使用最小内存对象或资源可以减小内存开销,同时让GC高效地回收不需要的对象,让也能够用堆内存保持充足的可用内存,使应用更稳定高效地运行,常见做法如下:

    • 对象引用:强引用、软引用、弱引用、虚引用四种引用类型,根据业务需求合理使用引用类型。
    • 减少内存开销:注意自动装箱,增加内存复用。比如有效利用系统自带资源、视图复用、对象池、Bitmap对象的复用
    • 使用最优数据类型:例如针对数据类型容器结构,可使用ArrayMap数据结构,避免使用枚举类型、缓存Lrucache等
    • 图片内存优化:可设置位图规格,根据采样因子做压缩,用一些图片缓存方式对图片进行管理等。

    稳定性优化:

     内存使用不合理、代码异常场景考虑不周全、代码逻辑不合理等,都会影响,最常见的两个场景Crash和ANR,这两个错误将会导致程序无法使用,常用的解决方法如下:

    • 提高代码质量:比如开发期间代码审核,看些代码逻辑,业务合理性等。
    • 代码静态扫描工具:常见工具有Android Lint、Findbugs、Checkstyle、PMD等。
    • Crash监控:记录崩溃信息、异常信息,以便后续分析解决。
    • Crash上传机制:尽量保存日志到本地,有网络时再上传日志信息。

    耗电优化:

    • 计算优化,避开浮点运算等。
    • 避免WaleLock使用不当
    • 使用Job Scheduler

    安装包大小

  • 相关阅读:
    Codeforces Round #384 (Div. 2) 解题报告
    Codeforces Round #383 (Div. 2) 解题报告
    (DFS、bitset)AOJ-0525 Osenbei
    (DFS、全排列)POJ-3187 Backward Digit Sums
    自考新教材-p169
    自考新教材-p167
    自考新教材-p166
    自考新教材-p165
    自考新教材-p161
    自考新教材-p159
  • 原文地址:https://www.cnblogs.com/Mr-Deng/p/11425361.html
Copyright © 2020-2023  润新知