http://blog.csdn.net/wtyvhreal/article/details/44589665

之前有在写Android性能优化的问题,相信对于Android App省电的开发,一切性能优化都可以达到App的省电开发,所以一个省电的Android应用,性能优化占据很重要的位置。除此之外呢,根据个人平时的Android开发积累,LZ整理了几点关于Android应用省电的开发技巧,希望大牛们勿喷,有好的意见可以补充。


一.Android省电开发之性能优化


我之前博客有在总结,just a little,http://blog.csdn.net/wtyvhreal/article/details/44172125


二.Android省电开发之CPU降频


众所周知,在android系统的耗电量排行里,cpu的耗电占 了比较大的一部分比例,也就是说,cpu的使用率和使用频率将直接或间接的影响电量的分配和使用,但很遗憾,android-sdk中没有为 android的开发者提供类似cpu管理的功能,但是当下很多省电类应用或专业的cpu管理软件都提供了cpu的降频甚至是超频的功能。

http://blog.csdn.net/matrix_xu/article/details/8509319(这里有篇博文写的很详细,拿来参考)


三.Android省电开发之service


Android应用开发中,难免会遇到service开发。android中服务是运行在后台的东西,级别与activity差不多。既然说service是运行在后台的服务,那么它就是不可见的,没有界面 的东西。Service和其他组件一样,都是运行在主线程中,因此不能用它来做耗时的请求或者动作。你可以在服务中开一一个线程,在线程中做耗时动作。

我们从三个方面来浅析一下service的省电开发

1. 查看service是否存活以及降低优先级:

假如一个service工作完成,但是来不及关掉或者kill掉,用户又看不见,所以这个service将会一直在后台运行,势必耗电。所以我们可以降低某些不常用service进程的优先级,在系统内存吃紧的情况下, 进程优先级低的service容易被系统kill掉。除此之外,可以利用监听系统广播来判断service状态是否存活,死亡即可手动kill掉。

2. 用IntentService代替Service开发:

普通服务一旦启动之后,就会一直处于运行状态,必须调用stopService()或者stopSelf()方法才能让服务停止下来。为了简单的创建一个异步的、会自动挺值得服务,Android专门提供了一个IntentService类。IntentService在运行完毕后自动停止,减少耗电量。

3. 后台执行的定时任务Alarm机制:

Service没必要一直在后台运行,这时候的定时任务显得很重要。Android的定时任务有两种实现方式,Timer类和Alarm机制。Timer有一个明显的短板,不适合长期后台运行的定时任务。为了能让电池更加耐用,每种手机都会有自己的休眠策略,Android手机就会在长时间不操作的情况下自动让CPU进入到睡眠状态,这就有可能导致Timer中的定时任务无法正常运行。而Alarm机制则不存在这种情况,它具有唤醒CPU的功能,即可以保证每次需要执行定时任务的时候CPU能正常工作。重点来了:从Android 4.4之后,Alarm任务的触发时间将会变得不准确,有可能会延迟一段时间后任务才能得到执行。这不是bug,而是系统在耗电性方面进行的优化。系统会自动检测目前有多少Alarm任务存在,然后将触发时间将近的几个任务放在一起执行,这就可以大幅度的减少CPU被唤醒的次数,从而有效延长电池的使用时间。


四.Android省电开发之网络


除了常规的异步网络、多线程技术、本地缓存等等之外,Android省电开发还有一个重要的方面是:wifi比蜂窝数据,包括2G(GPRS)、3G更省电:a)尽量在Wi-Fi下传输数据,当然这是废话,不过可以考虑在有Wi-Fi的时候做预加载,比如应用中心的zip包、手Q web类应用的离线资源等;b)非Wi-Fi下,尽量减少网络访问,每一次后台交互都要考虑是否必须。虽然WiFi接入方式已经占到移动互联网用户的50%,但是是有些手机设置为待机关闭WiFi连接,即便有Wi-Fi信号也只能切换到蜂窝数据;

看了一篇博文,上面数据测试,也不知道正确与否,但是能说明一定的问题。灭屏情况:灭屏传输,高负载download的时候WiFi最省电(70mA),3G(270mA)和2G(280mA)相当,是WiFi的4倍左右;亮屏情况:亮屏传输,高负载download的时候WiFi最省电(280mA),3G(360mA)和2G(370mA)相当,是WiFi的1.3倍左右;所以在Android应用省电开发中,我们可以在获取网络方式的方面加以考虑。


五.Android省电开发之Android L5.0(ART)登场


1.默认的ART运行模式

最新的安卓4.4系统中引入了全新的ART模式吗,相比之前流行已久的Dalvik模式有了很大的改变。因此LZ为大家制作了以下这张ART模式和Dalvik模式区别对比图表,通过对比,可以一眼看出 ART模式和Dalvik模式之间的区别。

这篇博客写的很好http://www.cnblogs.com/shaweng/p/3811461.html

在Dalvik中,应用每次运行,字节码都需要通过即时编译器转换为机器码,这回拖慢应用的运行效率,而在ART环境中,应用在第一次安装时,字节码就会预先编译成机器码,使其成为了真正的本地应用。这个过程叫做预编译。这样的话,应用的启动和执行都会变得更加快速。但是ART的缺点是预编译完的机器人占用了更大的存储空间,应用的安装需要更长的时间。但是牺牲空间时间换取省电速度,在Android应用中还是可以接受的,毕竟性能的提升,运行速度的变快,体验更流畅,电池续航更久显得更重要。

经测试,谷歌最新的Android L系统与上一版本相比续航能力可以提升36%。

Android 5.0的亮点http://lib.91.com/comments/141029/21755059.html

2.利用JobScheduler API

过去,如果开发人员想通过后台调取服务器数据,或完成某些处理工作,应用程序必须先监听是否有事件正在发生,并为自己设定一个唤醒时间,一旦应用程序开始运行,他需要检查各种环境条件,以确定是否具备条件让它完成工作,还是需要稍后再试,这种方式不仅复杂,而且容易出错,它会不断的浪费资源,比如当 一个应用程序被唤醒后,发现条件不符合就只能去睡觉并为下次唤醒再次设定时间,这是一个反复的过程。

这个问题,将引用JobScheduler来修复,它作为一个调度应用程序,负责当应用程序被唤醒时,提供适当的运行环境,所以开发者不用再让程序检测环境是否符合需求,开发人员只需要按照标准的流程来,调度程序会自动为唤醒的程序,准备好运行环境。应用程序可以使用这个调度程序,来唤醒他们,比如当设备连接到充电器后,调度程序将唤醒那些需要处理器工作的程序,让他们进行工作,或者在设备连接至WiFi网络的时候上传下载照片,更新内容等。该调度程序还支持一个时间窗口,以便它可以唤醒一组应用程序,这将使那些不需要精确唤醒时间,但每隔一两小时需要运行一次的程序能在同一时间点运行,这样就能让处理器保持更长时间的休眠。

JobScheduler的优势相当巨大,它不仅可以帮助手机节省电量, 实际由于不在需要监听,更改和设置报警,还可以帮助开发人员减少代码书写量。目前该JobScheduler类,已经加入Android L开发者预览版。

3.各种省电新模式和新技术

(1)全新的Material Design风格用户界面;

新的用户界面更加简洁、色彩更加丰富。动画效果更加合理生动,同时加入实时阴影的3D视图,更多的使用卡片风格的显示效果。全平台风格也变得更为统一。

(2)新的通知消息系统;

允许用户管理通知中心中的通知消息。原先的Android通知栏几乎是处于无法控制的状态,所有的应用通知都会弹出,要想关闭只能进到每一个应用中去单独设置,或是使用第三方软件来实现统一管理。但是现在不用了,Android 5.0已经自带了通知管理界面。

(3)多任务界面有着全新的Google Now卡片风格;

通知中心融入更多的卡片式风格,即使是在锁屏状态下也可以进行多种功能操作。同时用户可以自定义通知的优先级别,使得用户不会错过任何重要的通知。还可以设置特定的通知权限,只有被允许的通知消息才会推送。同时还具有操作性,比如用户在游戏时有电话打入,不会以全屏显示,而是弹出可操作的通知卡片,用户可选择接听或拒接,不影响游戏继续进行。

(4)Project Volta省电模式、BatterySaver省电模式;

Android 5.0的省电模式是通过JobSchedulerAPI以及自动调节屏幕亮度、刷新率来达到省电的效果,而且还使用了Project Volta量化每个应用的耗电量,在手机快没电的情况下主动降低CPU的主频或者关闭通讯模块,以获得更长的待机时间。还配备了一个Battery Bistorian电池历史记录功能,可让详细显示设备的耗电情况。


六.参考引用

http://blog.csdn.net/dyllove98/article/details/43407093

http://blog.csdn.net/matrix_xu/article/details/8509319

http://lib.91.com/comments/141029/21755059.html

http://tech.qq.com/a/20140702/026949.htm

http://news.mydrivers.com/1/310/310617.htm

http://mobile.51cto.com/abased-419415.htm

http://www.pc841.com/shoujizhishi/28594.html

http://mobile.51cto.com/news-417703.htm


更多相关文章

  1. Android中的自定义注解(反射实现-运行时注解)
  2. Android(安卓)开发——浅谈onInterceptTouchEvent、onTouchEvent
  3. 入门: 在Windows上搭建Flutter开发环境
  4. Android运行模式 未验证
  5. android studio 2.3.1 NDK开发入门实例
  6. Android(安卓)NDK R8 环境部署
  7. android之App Widget开发实例
  8. Android(安卓)NDK开发(windows)
  9. Android开发——you must set design_width_in_dp in your Andro

随机推荐

  1. Android中回调接口使用实例
  2. Android(安卓)四大组件之 Activity
  3. android build kernel make menuconfig及
  4. android View.GONE 失效原因
  5. android 开发奇葩问题
  6. Android(安卓)串口数据处理
  7. Android(安卓)View之对现有控件进行拓展
  8. android 软键盘处理
  9. 自定义android循环拖动组件
  10. Android(安卓)以太网调用流程