7、延长电池续航时间

  尽管应用有时看起来没做多少事,但实际上可能会很耗电,运行不了多久就会把电量榨干,使设备开机不到半天就没电了。那些被归为“电池杀手”的应用,最终的宿命就是被删除、得差评、不挣钱。因此作为开发者要尽量少用电量,合理使用电池。

  在三星GalaxyTab10.1中运行愤怒小鸟作为对比,平板各组件耗电可见一般:

  截图中Screen和Wi-Fi分列一二,远超作为游戏的愤怒小鸟。针对这两个组件,设备提供了相应选项让用户对它们的使用方式进行配置。例如,用户可调节屏幕的亮度(手动或根据所显示的图像自动),设定多长时间没有活动后屏幕关闭,屏幕关闭时Wi-Fi也关闭。例如,Wi-Fi连接如果在屏幕关闭后立即断开,那可能只占电池总使用量的百分之几。

7.2 广播接收器

  将注册放到onStart(),注销放到onStop()中是最显而易见的做法,为节省更多的电量,通常在onResume()和onPause()中也进行注册与注销

  如果需要知道当前电池信息,但不想用通知更新的方式,可调用registerReceiver()并把接收器参数设为null,无须注册任何广播接收器,就能得到包含电池信息的Intent。

  测量电池用量,建议在应用启动时获取电池当前电量,运行一段时间,在退出时再次获取电池电量。两电量之间的差异并不表示应用真实的耗电量,因为有其他应用同时在运行,所以需要有更好的方法测量单个应用的耗电量。如,计算出在电池电量耗光前,应用还可运行多久。

  为节省电量,应用应避免执行做无用功的代码。

  Android定义了应用可使用的5个广播Intent:

  1. ACTION_BATTERY_CHANGED
  2. ACTION_BATTERY_LOW
  3. ACTION_BATTERY_OKAY
  4. ACTION_POWER_CONNECTED
  5. ACTION_POWER_DISCONNECTED

  上述动作只要有一个发生,应用就会启动(如果它尚未启动)。虽然这可能是期望的行为,但很多情况下,你可能希望应用有不同的处理。例如这种情况,应用在前台运行时显示Toast消息是有意义的;若在后台时还出现Toast消息,就会干扰其他应用,损害用户体验

  当应用不在运行或在后台运行时,禁用这些Toast消息,可采用以下两种方法:

  1. 在应用中加入标记变量,在Activity的onResume()中置为true、在onPause()中置为false,并修改接收器的onReceive()方法,检查标记的值
  2. 只有当应用在前台运行时才可以启用广播接收器

  第一种方法虽可行,但只要动作之一被处罚,应用就会启动。最终会导致执行了不必要的指令,相当于执行no-op(无操作)指令,白白耗费电量。此外,如果应用包含多个Activity,修改标记会影响到多个文件

  第二种方法就好多了,因为我们可以确保只有在真正需要时才执行指令,就不会浪费电池电量。为了达到这一目标,我们需要在应用中做两件事:

  1. 广播接收器默认是禁用的;
  2. 广播接收器必在onResume()中启用,在onPause()被禁用

7.9 总结

  用户通常不会注意到应用是否延长了电池寿命。但是,若不做,更有可能会被注意到。因为单个应用可让所有其他人的努力化为泡影,所有应用都需通力配合,最大限度地延长电池的使用时间。用户会卸载耗电的应用,要合理使用电池,但也应当给用户配置选项的自由,因为不同的用户会有不同的需求。给你的用户配置的权利。

8、图形

8.3 OpenGL ES

  纹理压缩

  纹理定义了OpenGL ES应用的外观。虽然未压缩的纹理使用起来很方便,但这种纹理会迅速让应用变得冗赘不堪。如,未压缩的256×256的RGBA8888纹理就会占用256KB的内存

  未压缩的纹理对性能有负面影响,它们不像压缩过的能够缓存(因为比较小),且还要多次访问内存(影响功耗)。使用未压缩过纹理的应用体积也更为庞大,需要更多的时间来下载安装。此外,Android设备的内存通常是有限的,所以应尽可能占用较少内存。

  Mipmap

  通常,三维场景中出现在背景的对象,在屏幕上不会占用多少空间。如,屏幕上显示为10×10的对象使用256×256纹理就是浪费资源(内存、宽带)。Mipmap通过提供多层次细节的纹理来解决这个问题。

  虽然Mipmap包会比原始图像多用掉33%的内存,但它不仅可提升性能,也会提高图像质量。

  纹理如何渲染也取决于选择的那个glTexParameter()方法(比如glTexParamteri())设置的纹理参数。如,可调用glTexParamteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, param)设置缩小功能,param可取以下值:

  • GL_NEAREST
  • GL_LINEAR
  • GL_NEAREST_MIPMAP_NEAREST
  • GL_NEAREST_MIPMAP_LINEAR
  • GL_LINEAR_MIPMAP_NEAREST
  • GL_LINEAR_MIPMAP_LINEAR

  GL_NEAREST一般比GL_LINEAR快,GL_LINEAR又比其他四个更快,越慢的函数得到的视觉质量越好。应用程序会选择什么样的参数可能取决于用户的爱好(加入你提供方法让用户自行配置渲染质量),但许多用户不会有耐心尝试各种配置,找出合适自己设备的组合。因此,应用要自己选出最优的OpenGL配置

  多APK

  由于可能要支持多种纹理压缩格式(尽可能为每个设备都做优化),Mipmap需占用较大的空间,应用可能会超过Android Market(目前为50M字节)定义的大小限制

  若出现这种情况,基本上有三种选择:

  1. 减少应用的大小,如只支持ETC1纹理压缩;
  2. 安装应用后从远程服务器下载纹理;
  3. 生成多个APK,每个对应一套纹理

9、RenderScript

  Honeycomb(API等级11)引入了RenderScript,它是一个针对高性能3D渲染和计算操作的新框架。Android2.1(Eclair)后来也引入了这个框架,但Honeycomb是第一个正式将RenderScript公之于众的版本。

  RenderScript和NDK都是为了提高应用的性能而引入的。虽然它们有共同的目标,但应仔细斟酌它们的区别。

9.1 RenderScript优点:

  1. 平台独立(ARM、MIPS、Intel);
  2. 易于并行执行;
  3. 可使用CPU、GPU或其他处理器。

9.2 RenderScript缺点:

  1. Android独有(脚本不能用在其他平台,如IOS);
  2. 学习难度;
  3. API数量有限

  RenderScript的实际性能测试结果很难得到,它们实在太依赖Android版本和硬件设备了。一些脚本的运行速度可能远超Java或NDK的对应实现,而其他的可能不会。若因为遗留代码的缘故,或这样做更有意义,那么大可在实际中让应用同时使用RenderScript和NDK。

9.3 小结

  虽然它似乎仍是Honeycomb带来的略显稚嫩的技术,RenderScript已在Android4.0中有所改善,在将来会更好地发挥硬件的优势。尽管试下ARM是Android移动设备的主要平台,使用NDK时合理的选择,可RenderScript是独立于平台的,这样可显著降低成本,带来巨大的收益。总的来说,RenderScript挺有前景,且很有可能是未来应用的很重要的组成部分,会用在单靠Java不能满足性能需求的地方。

《Android应用性能优化》3——电量、渲染的更多相关文章

  1. Android应用性能优化(转)

    人类大脑与眼睛对一个画面的连贯性感知其实是有一个界限的,譬如我们看电影会觉得画面很自然连贯(帧率为24fps),用手机当然也需要感知屏幕操作的连贯性(尤其是动画过度),所以Android索性就把达到这 ...

  2. Android客户端性能优化(魅族资深工程师毫无保留奉献)

    本文由魅族科技有限公司资深Android开发工程师degao(嵌入式企鹅圈原创团队成员)撰写,是degao在嵌入式企鹅圈发表的第一篇原创文章,毫无保留地总结分享其在领导魅族多个项目开发中的Androi ...

  3. android app性能优化大汇总(google官方Android性能优化典范 - 第2季)

    Google前几天刚发布了Android性能优化典范第2季的课程,一共20个短视频,包括的内容大致有:电量优化,网络优化,Wear上如何做优化,使用对象池来提高效率,LRU Cache,Bitmap的 ...

  4. Android APP 性能优化的一些思考

    说到 Android 系统手机,大部分人的印象是用了一段时间就变得有点卡顿,有些程序在运行期间莫名其妙的出现崩溃,打开系统文件夹一看,发现多了很多文件,然后用手机管家 APP 不断地进行清理优化 ,才 ...

  5. Android app 性能优化的思考--性能卡顿不好的原因在哪?

    说到 Android 系统手机,大部分人的印象是用了一段时间就变得有点卡顿,有些程序在运行期间莫名其妙的出现崩溃,打开系统文件夹一看,发现多了很多文件,然后用手机管家 APP 不断地进行清理优化 ,才 ...

  6. android app性能优化大汇总

    这里根据网络上各位大神已经总结的知识内容做一个大汇总,作为记录,方便后续“温故知新”. 性能指标: (1)使用流畅度:  图片处理器每秒刷新的帧数(FPS),可用来指示页面是否平滑的渲染.高的帧率可以 ...

  7. 包建强的培训课程(9):Android App性能优化

    v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VM ...

  8. Android开发性能优化总结(一)

    安卓开发应用首先要讲究良好的用户体验,如果一款软件卡顿现象严重,不流畅,经常崩溃,那么将给用户带来极不良好的体验,从而损失用户. 在实际开发和学习中,我总结了一下关于安卓性能的优化,供大家参考交流. ...

  9. Android应用性能优化系列视图篇——隐藏在资源图片中的内存杀手

    图片加载性能优化永远是Android领域中一个无法绕过的话题,经过数年的发展,涌现了很多成熟的图片加载开源库,比如Fresco.Picasso.UIL等等,使得图片加载不再是一个头疼的问题,并且大幅降 ...

  10. android app性能优化大汇总(UI渲染性能优化)

    UI性能测试 性能优化都需要有一个目标,UI的性能优化也是一样.你可能会觉得“我的app加载很快”很重要,但我们还需要了解终端用户的期望,是否可以去量化这些期望呢?我们可以从人机交互心理学的角度来考虑 ...

随机推荐

  1. python socket.error: [Errno 10061]

    用Python写server和client时候如果server中sock.bind(('localhost', 8001))  则client中sock.connect(('localhost', 8 ...

  2. (最小生成树 )还是畅通工程 -- HDU--1233

    链接: http://acm.hdu.edu.cn/showproblem.php?pid=1233 http://acm.hust.edu.cn/vjudge/contest/view.action ...

  3. (匹配 匈牙利)棋盘游戏 -- Hdu --1281

    链接: http://acm.hdu.edu.cn/showproblem.php?pid=1281 http://acm.hust.edu.cn/vjudge/contest/view.action ...

  4. 基于Verilog HDL的二进制转BCD码实现

    在项目设计中,经常需要显示一些数值,比如温湿度,时间等等.在数字电路中数据都是用二进制的形式存储,要想显示就需要进行转换,对于一个两位的数值,对10取除可以得到其十位的数值,对10取余可以得到个位的数 ...

  5. codeforces 261B Maxim and Restaurant(概率DP)

    B. Maxim and Restaurant time limit per test 2 seconds memory limit per test 256 megabytes input stan ...

  6. Chinese Seals

    Emperors used seals to proclaim their decrees to their people, officials used seals to exercise thei ...

  7. 集合(四)HashMap

    之前的List,讲了ArrayList.LinkedList,最后讲到了CopyOnWriteArrayList,就前两者而言,反映的是两种思想: (1)ArrayList以数组形式实现,顺序插入.查 ...

  8. [H5-Compress-Image]利用canvas实现 javascript 图片压缩处理_基于requirejs模块化的代码实现

    // 还存在有问题的代码,问题在于processFile()中// 问题:在ipone 5c 下,某些图片压缩处理后,上传到服务器生成的文件size为0,即是空白 ;define(['mod/tool ...

  9. FP-Growth in Spark MLLib

    并行FP-Growth算法思路 上图的单线程形成的FP-Tree. 分布式算法事实上是对FP-Tree进行分割,分而治之 首先,假设我们只关心...|c这个conditional transactio ...

  10. xlsxwriter

    xlsxwriter是python中用来处理execl表格的库 参考