[/table] |
|
使用DDMS并不复杂,你只需要用USB连接手机到电脑,打开手机上的usb调试开关,就可以在DDMS上看到非常详细的应用程序信息。比如用DDMS来监控应用程序是在什么时间通过哪个端口请求网络数据的,可以非常明白的看出哪些应用程序在后台保持着长链接来获得推送数据(并消耗相当的电力)。这里能看到的信息要比任何Android上的xx大师,xx专家都要丰富,准确得多。 |
|
|
|
考虑到这是训猴的初级教程,这里就不多介绍DDMS这样的开发者工具了。接下来介绍一下如何查看/发现烂app们,如何(在一定程度上)限制它们胡乱吃电力的行为。 |
|
|
首先要明确一点:Android自带的电力消耗分析工具是不准确的(设定-》电池使用-》排行榜),在它的数据之上,衍生出来的xx电池医生,xxx专家的数据也是不准确的。有的应用在这个排行榜上排名很低,但其实消耗了大量的电力。它不准确的原因主要有: |
|
|
1)只计算应用程序占用cpu时间,并用这个时间和在这个时间段里cpu/gpu的频率来计算耗电情况。我可以写一个应用程序,以100ms左右的时间间隔唤醒CPU,然后占用5ms,马上睡眠,等到下一个100ms……这样的情况下,Android系统统计出来的耗电量是相当小的(因为每次只占用cpu 5ms),但其实这样的做法会使得cpu永远不能进入deep sleep,实际带来很大的耗电开销 - 很多在后台跑着拉广告的国产应用程序就是这么写的。 |
|
|
2)如果应用程序调用Google backgroud transport等远程服务接口来传输数据,这部分耗电量会计算到Android系统上面去,而不是这个应用程序本身。这也就是为啥有人贴出的耗电情况,Android系统有时能占用到60%以上。 |
|
|
3)不计算应用程序使用通信模块的电力消耗。保持后台数据链接会带来明显的电力消耗,但对cpu/gpu使用却很少。你把电池充满,不要打开待机模式,放一晚上,一直开着微信(这个应用会长期维持后台数据链接),你看看电力消耗排行,微信是不是很小,小到可以忽略?明白了吧?(当然坦白的说,单一应用维持后台数据耗电量确实不大,但如果有5个呢?有10个呢?考虑到像百度地图,大众点评,淘宝这样的应用都要不知所谓的保持后台数据链接,总的消耗量就不小了) |
|
|
4)在编程上还有其他技巧可以绕开Android电力消耗检测。鉴于这是初级教程,不多说了~ |
|
|
***** 废话说完了 接下来就是真正的节电教程了~ |
|
|
根据上面所说的情况,总结一下我们调教猴机的主要工作应该是: |
|
1)发现耗电应用程序 工具:betterbatterystats, cpu spy,DDMS(这个属于高级教程,暂时不涉及) |
|
|
工具:钛备份 ,autostarts, LBE安全大师,Droidwall |
|
|
工具:advanced task manager, Juice Defender(很好用的工具,功能众多,但几句话真说不清楚。还是放到以后的高级教程里面吧) |
|
|
***** 节电教程第一步,干掉应用程序后台自动启动 |
|
|
几乎所有的应用程序都不需要通过监听系统事件自动启动。有同学要问,我要是禁止短信程序自动启动,是不是就收不到短信了?答案是No,因为这不是通过监听系统事件(BroadcastReceiver)实现的。如果一个应用是某种intent的默认应用,Android UI线程会通过发intent的方式直接把应用调起来。禁用软件自启如何实现的?其实就是修改应用程序注册到broadcast事件的钩子。大家可以写一段代码就知道了,被禁用自启的应用程序是收不到相应的系统广播的。 |
|
|
所以请放心的禁用应用程序的自启动吧。工具是autostarts和LBE安全大师。LBE安全大师更简单直观,合适初学者,并且它可以阻止你禁用不应该被禁用的系统应用,比如calendar storage(该系统应用为输入法进程提供服务),可以防止初学者干傻事儿把Android系统搞出问题来。作为初级教程,我推荐大家使用LBE的“自启管家”功能。可以允许自启动的系统应用有两个:日程存储和Download manager,其他的可以统统放心禁用。不会出事儿的。当然,作为国产应用的非常典型的特点,LBE自带了很多花哨的垃圾功能,比如病毒检测,通信拦截一类的。建议除了自启管家和主动防御之外的功能全部关掉。主动防御也很好用,但不属于这个教程我就不多说了。 |
|
|
autostarts的设置要丰富很多,可以选择阻止特定应用听到特定类型的broadcast,但太细的设置我认为没有必要,同时autostarts没有防呆功能,你可能把Android系统的关键服务也禁掉,不适合咱入门教材的定位。 |
|
|
一般可以运行自动启动的软件有,桌面类软件(我用小米桌面),通信拨号类软件(QQ通信录,触宝拨号这样的),你需要随时获得推送的软件(QQ,微信这样的),系统配置软件(LBE,setcpu,autostarts,droidwall)。这个条目仅供参考,大家请根据自己的需要自行做主。 |
|
|
|
|
电池杀手尤其指两种应用程序:不释放wake lock的应用和长期保持后台数据连接的应用。对于后者,一些国产应用软件尤其恶劣,看过大量国内软件市场上的国产软件注册network stat的广播,一旦有网络可用就打开数据连接去网上取广告。 |
|
|
寻找第一种电池杀手的最简单方法是安装betterbatterystats。这个软件可以检查所有类型的wake lock持有情况(被哪个软件持有,持有了多长时间)。在驯猴时应该重点关注PARTIAL_WAKE_LOCK。对于初级驯猴员来说,可以按照这样的步骤走: |
|
|
2)确保它在允许自动启动的名单里(如果你已经用LBE或者autostarts驯猴的话) |
|
|
|
|
6)打开屏幕,打开betterbatterystats,选择"since boot",选择PARTIAL_WAKE_LOCK。 |
|
7)正常应用可能会很短时间(几秒到1分钟左右)持有PARTIAL_WAKE_LOCK,比如你正在通过google play下载应用程序,关闭屏幕后google play就会持有该锁直到下载完成。 |
|
8)2B应用例如云中书城就会一直持有该锁直到把手机电池耗光为止。 |
|
|
顺便说一句,如果你发现有个叫做Audio_out_1的应用长期持有该锁,恭喜,你肯定是4.0.3系统并且遇到了著名的锁屏音频bug。这个google自己弄出来bug会导致锁屏音效应用不释放wake lock从而大量消耗电力。遇到此情况需要升级到4.0.4 或者在设置里面关闭锁屏声音。 |
|
|
|
|
有时候比较尴尬的情况是,你不得不依赖某些有缺陷的应用软件。把所有2b程序全部卸载掉可能不是最好的选择,所以我们需要蹲在地上好好想一想这个问题。对大部分应用来说,耗电问题主要是跑在后台和待机的情况下特别突出,跑在前台其实是无所谓的 - 对于前台应用来讲,屏幕是耗电大头,程序代码写差点无所谓,Google虚拟机优化得很不错,甭说你800块钱包吃住,300块钱包吃住写出来的代码也扛得住。我的解决方案是使用advanced task manager( | https://play.google.com/store/ap[table=100%,#f0f0f0]... nfolife.taskmanager)。这个任务管理器有两大特点:第一,支持白名单。第二,支持条件触发:关屏后延时1分钟(可设定)清理后台应用程序。第二点对我来说实在太好用了 - 关屏一分钟以后干掉后台应用,这不就是iOS了么亲! |