课程咨询 :4000178985

  • 如何做一款优雅的App?

    发布:西安安卓培训      来源:达内教育      时间:2016-03-23

  • 什么样的应用才是优雅的App?达内Android培训技术专家表示,所谓优雅的App就是把简单的事做到极致,要对终端应用性能进行打磨。在 Android应用优化方面,主要包括内存和UI流畅度的问题,比如内存占用与泄露,UI流畅度的帧数和响应时间,IO的阻塞式响应时间等。

    内存优化

    首先,为什么要优化内存?主要体现在OOM(Out of Memory)和导致UI不流畅上。对于手机来说,内存是一个非常稀缺的资源,即使是现在普遍拥有着很大内存的Android手机也不可避免,对此,测试人员应从编译代码、选定测试场景、测试场景转换成用例、跑起工具Run用例入手,并结合代码深度分析,来进行内存测试。

    达内Android培训技术专家认为内存中出现的问题主要包括DDMS、MAT和android.os.Debug三个方面:

    DDMS

    1、Heap如果data object超过16M便会出现问题,但由于现在人们的手机在无限增大,其上限各有不同,有100M、60M的,所以必须要逐步控制object的大小。

    2、Allocation Tracker

    上图显示了在这段时间内Java虚拟机申请的所有内存的状况,有些可能是打转过程占用内存。最简单的方法就是先检测,然后按照大小进行排列。在优化Android内存时,通常会碰到这样四个问题:万恶的Static通常见到在单例模式、多线程生命周期长过hold住本该释放资源、大胖子 Bitmap、Cursor。

    Memory Analyzer(MAT)1、Leak Suspects:内存泄露报告2、Top Components:吃货报告3、Histogram:每个Class占用内存4、Dominator Tree:列出哪些对象占用内存最多以及谁hold住这些对象UI流畅度

    在Android 2.2时,很多开发者都拿着Android手机使用或开发,但还是会买一部iPhone,因为觉得iPhone手机比较顺滑。我们一直在想怎样解决 Android应用各种卡顿现象。一个是主线程干的活太多,没时间来响应用户操作,还有就是其他人都在等着你干活,还有非常容易被忽略的不太合理的UI绘制方式。另外,有一些UI特效,实现方式有很多种,最简单的方式就是贴图,让美工画一张比较漂亮的图贴上去,这是最简单的,却也最耗时,其实 Android本身提供了很多更为高效的绘制方式。

    如何定位UI流畅度问题?

    归根结底还得用数据来说话。Android提供的Method Profile可以解决这个问题,此外,还有非常古老的运用切片式编程理念的Aspectj插桩,能够将代码片段按照一定的规则切成一片一片的,由此来让测试人员找出问题点所在。还有就是GT,它是一个很神奇的工具。有了以上工具还必须寻找缺陷方法、获取找到缺陷点的响应时间。要想解决UI流畅度问题,首先要了解一个UI画出来大概是怎样的过程,从读取XML(inflate)、计算大小(measure)、布局坐标计算(layout)到绘制到屏幕 (draw),每一步都需要花费较长时间。

    就拿测试FPS来说,市面上很早就有了测试FPS的工具,但它的输入是依赖于开发者的输入,如果在操作上手快或慢一点,帧率便会不同,在优化过程中便会发现有的时候响应时间很短,但在帧率上并没有发生很大变化。在研究Android自身刷新的绘制机制时,我们发现Google在更新 Android 4.1时有了一个很重要的名为“黄油计划”的工程,其中“垂直同步”对测试流畅度非常有用。

    Google为什么会更新这个过程?在绘制一个时间片时,很多时候并不是因为CPU或GPU性能不行而导致UI出现卡顿,而是因为前一帧没有绘完,下一帧就来了,造成一定的积累,而如果很快绘制完,中间便会空等,Google由此便引用了垂直同步这个机制。

    但如果一个工具在绘制,另一个工具还没有空闲,这个时候便会产生跳帧,相当于一个垂直同步60次/秒,也就是一个时间段16毫秒,上一个时间段占用下一个时间段,根据这个机制,下一个时间段会将时间空出,这个时候测试人员便会在屏幕上看到第二帧,于是Google又引入了一个新东西,在引用垂直同步后,最高帧数就是60帧。由此,在经过大量实验之后,推演到“丢帧”和“流畅度”,比如,应该在16毫秒完成的工作却因各种原因没有做完,占了下n个 16毫秒的时间,就相当于丢了n帧,而当流畅度数值越小时,便说明程序越卡。

    如何得到流畅度?通过注册一个回调就可以实现。使用GT可以边走边测边调试,仅用一部手机便能完成对被测产品的操作、关键参数的修改、关键指标的观测。而针对UI流畅度,达内Android培训技术专家做出了一个流畅度评估算法,利用数学模型来处理数据,将曲线变成一个单一数值,并按照场景进行归类。那么,如何解决UI流畅度问题呢?主要有以下两项操作:1、利用Method Profile采集CPU使用数据:将DDMS埋在代码中,或在代码中直接调用andriod.os.Debug下的方法:startMethodTracing(String traceName,intbufferSize)

    stopMethodTracing()2、利用DDMS采集Method Profile数据

    达内Android培训技术专家根据多年的教研经验认为:Android系统的卡顿现象一直影响着用户的实际体验,要想打造优雅的的Android App需要从内存优化和UI流畅度两个大方向入手。因为只有这样才能更有效的解决卡顿问题。

上一篇:详解Android手机开发优势

下一篇:有钱人用安卓的5大理由

最新开班日期  |  更多

Android--高端周末班

Android--高端周末班

开班日期:05月31

Android--零基础全日制

Android--零基础全日制

开班日期:05月31

Android--零基础周末班

Android--零基础周末班

开班日期:05月31

Android--高端全日制班

Android--高端全日制班

开班日期:05月31

  • 地址:西安市碑林区长安北路8号陕西高速大厦15F
  • 课程培训电话:4000178985     全国服务监督电话:400-111-8989
  • 服务邮箱 tousu@tedu.cn
  • 2001-2016 达内时代科技集团有限公司 版权所有 京ICP证8000853号-56