Dalvik 是一个即时编译器,能够做部分运行时优化。ART 具有提前编译能力,做起优化来更狂野。当然这两种编译选项在优化任务上都还有待改进的地方。总体上ART 相比 Dalvik 有 30–200% 的性能提升。 垃圾回收 垃圾回收机制(Garbage Collection -GC) 特指运行环境对不再被引用的对象的内存释放过程。有太多资源待处理的话它也会对渲染帧率造成明显影响。 Dalvik 和 ART在垃圾回收的实现方式上很不相同。Dalvik里对象一旦分配就会固定到堆中的特定位置,运行时间久了碎片化严重,虚拟机难以找到合适的地方新建对象,垃圾回收很容易耗费掉大约10–20毫秒的时间,具体消耗与应用新建对象数目相关。 ART 会在设备空闲期间对堆进行整理,同时它给位图等大文件准备了单独的堆,使得垃圾回收执行速度大大提升,通常保持在 2–3 毫秒间。 2–3 毫秒在一些时候也会造成跳帧等情况,所以还是要注意合理分配和使用内存空间提高渲染速度。 UI 线程 很多运行问题都与负责界面的专门线程相关。安卓采用单线程界面系统,任务串行执行,任何干扰绘图的情况都会影响到绘制帧率。 在 Lollipop 版本里,渲染线程出现并被用于向 GPU 发送绘图命令。这降低了UI 线程的工作负荷,但是输入、滚动还有动画都在 UI 线程中运行,atv,所以该线程必须要保持快速响应能力。 存储 不同设备的存储能力有很大差异,一些机器可能存放 500 MB 文件就要卸载部分应用来腾出空间。初看起来移动设备的闪存应该像笔记本的SSD 那样可以快成一匹马,实际情况可不是这样。还有使用 SD 卡做存储扩展时,实际传输速度依厂商、芯片、SD 卡的不同会有很大差异,开发者也需要将这种情况考虑在内。 网络 并不是所有 wifi 都有五星好评,4G时代还有很多地区主要覆盖的是 2G 网络,针对网络环境有以下两点要注意: · 对于依赖高速网络的应用,最好设置网络状态检测机制,只有当条件满足时才进行多媒体资源下载等活动。 · 避免过多进行同步操作,你希望保持信息的绝对实时性并不代表着用户愿意这样做,严重消耗网络资源且损耗电池寿命的频繁同步操作请尽可能地避免。 系统村 每个人都认为自己开发出来的应用宝宝是棒棒哒。不过一个设备就像一个小部落,系统除了运行你的应用之外,还要负责自身运转以及管理诸多应用。占用过多资源的应用会对其它“村民”带来困扰,在必要情况下它会被强制终止以释放资源。一旦用户需要切换回该应用,就得重新加载才行;这会让大家认为它不够可爱。 所以做个系统村的好公民很重要,贪婪的程序是要被剔除的。 共享区域的悲剧 应用通常不会因为自身运行而造成坏的用户体验。但在实际设备当中,资源被多个应用共享,很难保证不出现僧多粥少的情况。 就拿一个频繁同步数据的应用作例子,一个应用还不算什么。当系统运行着超过 100个同类应用的时候,轮轴转的系统下即使你的流量撑得住电量也会很快耗尽。相比之下一个操作次数少、批量更新的应用比它们不知高到哪里去。很多时候,开发者需要将应用放到安卓系统的“公地”里去考量。
成为 Google 认可的 Android 工程师,只需 2 步!
无论你是 0 基础新手、还是有 Java 基础;无论是希望学 Android 开发的程序员,还是想进一步提升能力的 Android 开发者,都可以在这个 Google 官方参与制作的课程项目中找到适合自己的成长路径!加入课程,你讲享有独家硅谷课程、实战项目、一对一学习辅导、Google颁发学习认证等独家服务。结业后,还有内推加入Google、滴滴、京东、新浪等名企的机会。
* 本期课程报名中,截止6月21日23:59,入门课程限定75名,进阶课程限定50名,6月15日 将发放第一批录取通知。手快有手慢无,错过一辈子! * 课程报名请点击 阅读原文,了解学费及课程安排,还能加入微信群,掌握第一手信息,关注课程后还可加入直播答疑分享,感兴趣的同学可以输入「stormzhang0614」购买课程优惠 300 元哦! (责任编辑:本港台直播) |