转载自: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开发除了使用常规的HttpURLConnection和HttpClient之外,使用Volley必然会成为了将来移动开发的趋势。至于Volley是什么好东东,可以借赏郭霖大师的博文,真是受益匪浅:http://blog.csdn.net/wtyvhreal/article/details/44598957

五.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

Android的省电是一个很大的话题,LZ才疏学浅,大牛们有什么好的见解,可以分享讨论。。。

Android省电开发 浅析相关推荐

  1. Android之蓝牙开发浅析

    简述: 关于蓝牙的开发,是从sdk2.0版本开始支持的,模拟器不支持,必须使用真机进行测试 android中所有半球蓝牙开发的类都在android.bluetooth包下 权限: <uses-p ...

  2. 【Android】Crosswalk 开发浅析

    最近的项目中,有用到phonegap,并需要展示一些需要高效渲染的网页,同情况下,IOS跑起来轻松无比,但是Webview....(泪奔),在焦头烂额的机型及版本适配中,发现了Crosswalk项目. ...

  3. Android 功耗(18)---android省电和提高效率

    android省电和提高效率 一.Android省电开发之性能优化 我之前博客有在总结,just a little,http://blog.csdn.net/wtyvhreal/article/det ...

  4. Android 即时通讯开发小结(二)

    <Android 即时通讯开发小结>基于IM Andriod 开发的各种常见问题,结合网易云信即时通讯技术的实践,对 IM 开发做一个全面的总结. 相关推荐阅读:. Android即时通讯 ...

  5. android电商平台,基于Android的电商平台通用客户端的设计与实现

    摘要: 随着移动互联网的高速发展,电子商务已经由过去的PC端逐渐进入了移动时代.一方面,对于处于创业阶段的电商平台运营者来说,由于资金不足,开发人员不足,很难在短时间内拥有电商平台的手机客户端.另一方 ...

  6. Android智能硬件开发心得总结(二)

    Android智能硬件开发心得总结(一) 6.关于屏幕显示 每次一个新项目的开发,我所做的第一件事就是确定所选定显示屏的型号规格,然后将规格书发给主板供应商让其先调屏参. 调屏参是很可能会出现无法点亮 ...

  7. Android装置的开发挑战:软硬件如何巧妙整合

    随着科技的快速演进,现代人对行动通讯.无线上网与多媒体娱乐的需求更甚以往,所谓的智能型手机(Smart Phone)便成了炙手可热的个人消费电子产品之一,从Apple不断推出iPhone企图颠覆消费者 ...

  8. Android车载应用开发与分析(13)- 系统设置-蓝牙设置

    1. 前言 Android 车载应用开发与分析是一个系列性的文章,这个是第13篇分析系统设置,该系列文章旨在分析原生车载Android系统中核心应用的实现方式,帮助初次从事车载应用开发的同学,更好地理 ...

  9. 23最新《Android音视频开发进阶指南》,音视频开发者速领

    作为Android开发程序员,我们时刻站在互联网的前端,而音视频作为现在乃至未来几年一个强劲的风口,吸引了许多程序员的关注. 那么音视频开发的行业现状究竟如何呢?我们又该怎样入门呢?请看下文: 音视频 ...

最新文章

  1. 零基础入门学习Python (9)-列表(1)
  2. 更新Android Studio 3.1.1碰到的问题
  3. 图解选择排序与插入排序
  4. 【线段树】Serious Business(CF1648D)
  5. python内置函数可以用来_Python内置函数——compile
  6. 20200507:力扣151周赛下
  7. 代码块(block)之函数体(二)
  8. Harmony OS — TabList和Tab分页栏
  9. 1.3使用command-line runners
  10. 如何成为一名卓越的数据科学家-桃树七剑之二:数据准备
  11. Atitit 长距离无线通信法 LoRa NB-IoT NB-CIoT LoRa是Semtech公司的创新发明,该技术向用户提供显著的长距离、低功耗、安全数据传输机制。使用LoRa技术构建的公用网
  12. 路由器显示未连接网络连接到服务器ip,无线网络连接没有有效的ip配置怎么办?...
  13. 2020校招复盘——秋招不易,致敬每一位追梦者(含网易、京东等19家互联网公司后台/Server端面经)
  14. html三角形正方形代码,用CSS画三角形,纯CSS绘制三角形的代码
  15. nstrFetchProhibited,stack overflow,Task watchdog got triggered解决办法
  16. webapp封装 苹果app证书
  17. 读《沟通的方法》推荐序有感
  18. 苹果x专用计算机下,电脑卡iPhoneX在线软件
  19. 计算机开机显示器不亮,电脑开机显示器不亮该如何解决
  20. 2020移动apn接入点哪个快_为什么别人的4g网总比你快?手机这个设置没开启,难怪网络...

热门文章

  1. 【物联网】SIM908/508 GPRS发送数据|送数据控制符|透明传输
  2. JSON.parse() 方法与$.parseJSON()以及JSON.stringify()区别
  3. bzoj3110 K大数查询
  4. C语言指针函数和函数指针详解
  5. M1 MacBook可以运行Linux了,Linux之父宣布Linux 5.13公测开始!
  6. 新建立QQ群C#技术相关JAVA技术相关
  7. # 导入一张视频 导入一张gif动图 将动图添加到视频中 保存为新的视频
  8. java.awt的父类,javax.swing.Japplet的父类是()。A.java.awt.panelB.java.a
  9. 《财富》公布2023年美国500强榜单:沃尔玛连续11年居榜首,苹果盈利能力最强 | 美通社头条...
  10. 人民满意手机银行服务白皮书——服务分析篇