揪出手机耗电元凶——高德地图缓存数据
最近手机一直不正常,莫名其妙的发热,然后一看手机自带的“电池”程序耗电信息,机器一直处于“唤醒”状态,程序列表中,”媒体“这个Android图标的应用耗电量非常之大。
手机里装的App太多了,也说不清到底是哪个的问题,当然,也不排除Android系统本身的BUG。该怎么测试呢?备份所有重要数据,恢复出厂设置,格式化SD卡。
恢复出厂设置、格式化SD卡后,一切正常,测试了几个小时,耗电量很小,只用去大概2%的电量,也不一直处于唤醒状态,唤醒的时间,基本跟屏幕亮着的时间吻合。看来,可以排除Android系统的重大BUG了。
接下来,测试APP,先一股脑儿装了所有的APP。装完之后,测试了几个小时,也是一切正常。看样子,也不会是因为APP自身的问题。
那到底是什么问题呢?刚开始百思不得其解,应用初始化安装后,2天的时间内,没出一点儿问题。
因为是学GIS的,手机里也就装了高德地图这一APP,由于本人还处于上个世纪,一直用的移动2G网络,外出时,手机网络一直不给力,想地图出来的时候,越想越出不来,就在“高德地图”这一APP里下载了离线地图。刚下完还好,也没有出现耗电的问题。
过了这么一天,重启了下手机。这下糟糕了,又出现之前耗电的问题,到底是什么问题呢?随手打开了Android系统中“开发人员选项”中的“显示CPU使用情况”这一选项,仔细观察了下CPU使用情况,一直有一个叫“android.process.media”的应用居高不下。难不成这就是那个“媒体”?看应用名,应该就是它了。到底是怎么回事呢?
Google了许久,发现因为这个“android.process.media”耗电的不止我一个。网上提供的解决方法,也是五花八门。归纳起来有三种:
1、文件夹下建立”.nodedia”文件
效果不明显,加了还是有。据说要在所有子目录加上,只加在父目录无效,没有测试。
.nomedia 文件下载
.nomedia文件的作用
应用中的图片不被系统图库扫描。
一般开发的应用中会缓存一些图片到本地,不想让系统图库扫描到应用的图片或者不想对用户浏览图片造成影响。
.nomedia文件放在任何一个文件夹下都会把该文件夹下所有媒体文件(图片、mp3、视频)隐藏起来,使它们不在系统图库,铃声中出现。
2、“System Tuner Pro”的APP
System Tuner v3.1.3 下载
手动管理该进程的(没有测试)。
3、“Rescan Media Root”的APP(需要ROOT)
Rescan-Media-Root-2.3.2 下载
这一APP使用Android pm命令来disable掉android.process.media package,当然了,你也可以使用该工具所带的enable命令来enable。
虽然说该工具在一定程度下有效果,disable之后,android.process.media也就从进程列表中消失了,重启手机,也不会出现。但这么做,有一个很严重的副作用,系统自带的“图库”、“相机”,甚至是默认铃声都没法使用了……一个词总结:得不偿失。
作罢,重新恢复出厂设置,格式化SD卡,继续装完所有应用,继续测试。
这次装完后,安装了“南京掌上公交”的应用,使用其更新了线路数据,并测试了实时公交查询。这款软件,其实我也比较怕装,之前的时候,就是因为装了它,手机一直发热,耗电量也是急剧增加。关闭软件后,测试了大概3个小时,没有出现android.process.media一直扫描的情况,也没有出现异常耗电的情况。
今天晚上,还是试着把高德地图的离线地图给下载下来了。刚下载完,就糟糕了,android.process.media又出现了,又在勤勤恳恳地扫描我的SD卡了,重启手机,问题依旧。心想,问题大概确定了,就是高德离线地图的原因。用RE文件管理器,去高德的目录看了下离线地图的层次结构,RE卡了半天才显示出来了子目录了,因为实在是多,我就没高兴看。
去高德官网,用PC下载了离线地图。乖乖,好家伙,全国的概要数据,下载完rar格式,使用I5-2400 CPU,8G 内存,1T 7200 RPM硬盘,Win7 64位旗舰版,WinRAR X64 4.20版在打开rar文件的时候,最起码卡了有10秒钟,一看目录,吓尿了,整个文件夹根目录有4099个项目,4096个文件夹,1个aom文件,1个dat文件,1个ind文件。
看到这个数字,心里就开始骂高德了,我下个手机版的离线地图,你给我搞这么多的目录,是想累死手机,还是想累死手机呢!?
找到问题所在,想办法来解决问题。先删掉了SD卡根目录下的“autonavi”文件夹,删掉了“高德地图”,重启手机,无效,还是在扫描。
继续,清除“媒体”的缓存,重启手机,OK,问题解决。
可是我该怎么用“高德地图”呢?如果只是暴力方法删除了此应用,那也得不偿失。这时,我分析了下高德分省的离线数据,里面的文件夹明显比全国概要地图里的少很多了。OK,就先下个江苏省的离线地图吧。下完之后,重启手机,正常;再次重启,正常。
这次手机耗电的问题应该算是解决了。归纳一下:
1、android.process.media,也即“媒体”是Android中一个用来扫描媒体文件的应用包,此设计,应该是google为了索引媒体文件的方便。但也带来一个问题,当SD开中的文件夹太多的时候,会明显拖慢扫描速度(据说这是Android 4.0-4.1的BUG,4.2已经解决)。
2、高德,你为啥要搞这么多文件夹呢?你以为手机是你集群服务器啊。SD卡速度本来就不快,再加上手机这CPU,这电池,这不是明显坑用户嘛?!
3、如果要使用高德离线地图,就不要下载“全国概要数据”了吧,分省下,应该问题不大。