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. 控件无法安装的问题-Unable to execute file

    官方网站:http://www.ncmem.com/ 产品首页:http://www.ncmem.com/webplug/wordpaster/ 产品介绍:http://www.cnblogs.com ...

  2. (网络流) Island Transport --Hdu -- 4280

    链接: http://acm.hdu.edu.cn/showproblem.php?pid=4280 源点是West, 汇点是East, 用Dinic带入求就好了 代码:要用c++提交 #pragma ...

  3. spring MVC controller中的方法跳转到另外controller中的某个method的方法

    1. 需求背景     需求:spring MVC框架controller间跳转,需重定向.有几种情况:不带参数跳转,带参数拼接url形式跳转,带参数不拼接参数跳转,页面也能显示. 本来以为挺简单的一 ...

  4. Android-Java-进程与线程

    1.进程:什么是进程: Mac操作系统,Windows操作系统 ...... 等等,都是由多个进程来运行(系统进程,普通进程,等) 操作系统最小的控制单元是进程,一个应用就是一个进程 进程 全称为:操 ...

  5. HttpWebRequest 模拟浏览器访问网站

    最近抓网页时报错: 要么返回 The remote server returned an error: (442)要么返回: 非法访问,您的行为已被WAF系统记录! 想了想,就当是人家加了抓网页的东西 ...

  6. pgAdmin4 汉化

  7. C# 实现图片压缩

    代码: private static ImageCodecInfo GetImageCodecInfo(ImageFormat imageFormat) { ImageCodecInfo[] imag ...

  8. vs 生成事件 +版本号+sed.exe

    set ASMINFO=Properties\AssemblyInfo.csFINDSTR /C:"[assembly: AssemblyVersion(" %ASMINFO% | ...

  9. SQLite 编译错误 - 试图加载格式不正确的程序

    刚开始用SQLite,刚开始写了一个小程序,连接数据库的时候出现了问题,提示试图加载格式不正确的程序, 原因是我当前工程的目标平台是X86,改成Any CPU之后问题就解决了.如下图:

  10. 第七章 ReentrantLock总结

    常用方式: int a = 12; //注意:通常情况下,这个会设置成一个类变量,比如说Segement中的段锁与copyOnWriteArrayList中的全局锁 final ReentrantLo ...