转自 http://blog.youkuaiyun.com/d_clock/article/details/42968039
前段时间,在公司做项目的时候发现原有项目中的代码在Service中使用handler不断发送Message到Looper处理MessageQueue中来维持IM功能的“心跳”,心里瞬间觉得这个地方的代码很不靠谱,主要原因分为两个:
1.handler的生命周期和Service不一致,如果Service某个时刻被系统回收内存杀死了,逻辑上handler应该就会停止心跳包的发送,但是此时实际代码运用中handler依旧可以源源不断的发送消息,而且由于handler持有了外部销毁的Service的引用,造成Service即使被杀但是内存不被回收的内存泄漏问题也是比较严重的;
2.Android官方的API文档建议我们,如果要执行定时任务的话,可以使用AlarmManager来定期执行任务,减少唤醒系统时钟的次数,从而减少电量的消耗;
针对以上问题,做了一下小小了解,因为项目开发中我对于AlarmManager的使用已经相当熟悉,但是对系统唤醒锁的概念还是不是很理解,之前甚至天真的认为,只要锁了屏,系统锁就不会被唤醒,亮屏的时候,系统唤醒锁才重新唤醒。可是想想又不太对,