6月10日,安卓8.0正式发布!新特性一大堆,但总结为一个字:快!
眼看 Android 8.0 都出了,你还对安卓开发一窍不通?别急,让优达菌教你如何用正确的姿势和安卓系统生宝(ying)宝(yong)。选择成为安卓开发,首先要理解移动计算环境,那这些东西为何重要? 理解安卓的运行环境才能真正掌握我们所讲的开发工作的“最佳实践”。开发者要时刻牢记移动设备不同于台式机和服务器,你所能使用的计算资源非常受限。不将其纳入考量范围而直接上手开发不止会让应用表现欠佳,还会在消耗大量内存的同时拖慢系统运行速度。若干问题累积起来会严重干扰设备运行,造成糟糕的用户体验。
我们在这里对移动设备开发上,会面临的限制条件进行了梳理和总结: 内存 移动设备内存偏小,虽然并不是所有设备都存在这个问题,但它影响着当前生态系统中的大多数机器。要知道,开发者所拥有的机型往往运行速度更快、计算能力更强,但这不代表着所有目标设备都是如此。 两年前当开发者开始使用1GB到2GB 内存的Nexus5 时,512MB内存才是大多数设备的标配。以最新款设备来估算你的应用所处的运行环境并不合适。另外很重要的一点是安卓系统是多任务多服务并行执行的,同一时间可能有很多 activity 在跑。系统这一特征对于创造良好的用户体验很重要,使用者可以在无需重新加载的情况下在近期使用的应用间自由切换。 不过,相应代价就是当有应用消耗了过多的内存时,剩余应用可使用的资源就非常有限。系统会终止其运行并回收计算资源以减缓内存开销,这样在用户重新切换到该应用时必须重新加载。 总之,请尽可能降低你所编写应用的内存消耗,否则整个系统都会受其影响。 CPU 首先纳入考量范围的还是用户实际使用设备的状态,虽然你很清楚手上设备的 CPU比起台式机甚至服务器计算能力要弱很多,但用户所持设备上的CPU可能还要受限一些。低端设备市场广阔且销量很大,不要只以你手上的最新设备作为应用测试基准。在大多数时间,CPU 都不是满负荷运行的。系统会尽己所能降低CPU功耗以保持电量防止设备过热,在屏幕关闭、没有用户输入、动画渲染停止这些情况下系统会悄悄地进行这项工作。针对这一系统特性,在应用开发时有这两点要注意: (1) 你通常情况下不能使用一个满负荷运转的 CPU。 (2) 在调用诸如动画绘制这种功能时,系统会“壕气地”运转,避免降低功耗可能带来的卡顿问题。所以除非在必要情况下,不要以牺牲电量为代价追求绝对性能。 GPU 关于GPU 的内容和刚刚讲的 CPU 部分相似。另外还有几点补充: · 传输代价: 将一个大的纹理/位图载入GPU代价高昂,你载入的文件越大,花费时间越长。频繁地进行图像相关操作,开奖,改变位图、增改大量文字内容 (特别是字体库庞大的语种) 会造成运行过载,因为有太多纹理要上传到 GPU 进行渲染。 · 相比于以基本图元渲染衡量的GPU性能指标,实际渲染像素数目才是和GPU 表现直接相关的。硬件可能无法在一帧内完成高分屏所有像素的绘制。该问题被称为过度绘制(overdraw),在重叠区域进行频繁绘图,比如在屏幕上依次绘制桌面背景、容器背景、半透明视图就可能引发这种问题。 内存 == 性能 我们着眼于内存优化,它与系统运行表现息息相关。内存的分配、管理、回收都需要消耗计算资源,内存使用量直接反映了应用对设备的影响。单个应用占用过多内存对其它应用和整个系统来说都不是好事,还会消耗过多电量。 使用低端设备 摩尔定律不只预示着你会拥有更快更强大的机器,也说明一台还不错的机器能以更便宜的价格获取到。低端机型的销量很大,使用你能找到的最老旧的设备测试应用对开发是一种保障。 流畅渲染 理想的无跳帧状态要求每帧16 毫秒左右的渲染时间。处理输入、调整布局等等下一帧绘制的准备工作都要在这段时间完成。这样才能为动画和触控操作提供支持,达到 60 fps 的流畅效果。16 毫秒是一个上界,如果应用渲染速度逼近这个上界,5 毫秒左右的垃圾回收任务的插入都会对绘制造成明显影响。缓冲区恒定以六十分之一秒的时间间隔读入数据,17 毫秒的绘制完成速度也会将帧率降到 30 fps 的水平。 运行时环境 在 Lollipop 版本之前,安卓底层使用 Dalvik 虚拟机。 ART虽然在KitKat 版本里也作为测试版的可选项出现过,只有在 Lollipop 才正式采用。 (责任编辑:本港台直播) |