最近在做手机定位的事情,每次一锁屏,不过几分钟定位就停止了,无法继续定位。尝试了各种方法,最后使用高德地图的提示找到了解决方案。
总结我目前使用的方法如下:
1. 使用前台线程
2. 在jni中创建线程,实现数据收发(使用java创建线程应当一样的效果)
3. 收发使用TCP通信
高德地图的提示如下:http://lbs.amap.com/dev/ticket#/faq/277
1、通过创建Timer来保持CPU唤醒状态:
Android 的 Timer 类可以用来计划需要执行的任务。但 Timer 的问题是比较消耗手机电量(实现是用 WakeLock 让 CPU 保持唤醒状态);另外一点是:部分厂商将WakeLock也设置了休眠时间,就是说 Timer 很可能和CPU一起处于休眠状态。Timer 类只能解决一小部分问题。
2、通过AlarmManager保持CPU处于唤醒状态:
AlarmManager 是 Android 系统封装的用于管理 RTC 的模块,RTC (Real Time Clock) 是一个独立的硬件时钟,可以在 CPU 休眠时正常运行,在预设的时间到达时,通过中断唤醒 CPU。用 AlarmManager 来定时执行任务,CPU 可以正常的休眠,需要运行定位时醒来即可。但部分厂商为了使设备更加省电,将AlarmManager也做出了修改,例如5s一次的响应更改为50s或者是几分钟,有些干脆在CPU休眠后彻底停掉了。
3、通过心跳长链接保持client端CPU处于唤醒状态:
最佳唤醒CPU的方法是通过server端与client端的长链接通信。例如每次长链接保持5分钟时间,每30s通信一次,这样可以有效确保CPU处于唤醒状态。