转自 http://blog.csdn.net/w_angrong/article/details/8665721
今天被领导掳去搞了个模块叫SMPL。baidu,google,csdn毛都没搜到,最后四处打听,在源代码里grep了半天才搞明白一点,甚为感慨,于是决定把它写下来,以免再发生我这样的悲剧。
SMPL:Sudden momentary power loss。大概就是“突然掉电的意思”。这个模块在高通的modem里。大概的用处就是:当手机突然短暂的(0.5s-2s)掉电的时候,会自动重启。大致的考虑是:当用户不小心将手机掉地上了之类的,电池松动了,导致手机关机,会自动再开机,以免处于关机状态用户却不知道,考虑的太周到了….
一般关键代码都在pm的相关代码中,大概接口就两个(名字不固定),一个是set_delay(0):用来设置断电时间,比如set_delay(0.5s),就是断电0.5s之内会自动重启;sett_status(SMPL_ON):这个顾名思义,是开关。当然一般还会有宏控制。可以完全不用这个功能(可惜的是我没找到这些代码是在哪里实现的)。
不少的手机就是没有这个功能的,samsung平台应该就是没有的。你可以快速插拔你的电池试试看会不会重启就能知道有没有这个功能。
乍一看,你会觉得这是个相当周到的功能,其实也会导致一些问题,比如:我所接触的这个问题—----在手机本身电量就很低的情况下,再去使用耗电量大的功能,比如camera,通话等,电池的电量就会突然变小,以至于低于触发SMPL的阀值,这下就悲剧了,手机就会自动重启,然后又低电量自动关机。听起来貌似没啥关系,但是手机制造商肯定是不可能置这样的bug于不顾的。
当然我最后也没有找到合适的办法,只是提议在电量低于2%左右的时候,就禁止用户使用耗电量大的apk。
不过,导致这样的问题的根本原因不在于上面提到的阀值或者delay时间,而是电池太差,好的电池是不会出现使用过程中电量的突然大幅度下降的,所以一搬也不会碰到这个问题。估计这也是没有这样的帖子原因吧。
小弟技术有限,如有不正确指出,请多多指正!谢谢!