tracelive

简介

下文将着重介绍开发者如何保证鹰眼服务的存活,并完整上传轨迹。

如何监控鹰眼service是否存活

判断鹰眼servcie存活有两种方法:

① 调用startTrace()来判断。若返回"服务已开启"或者"已开启缓存",则表明服务正在运行;若返回"success"或"开启缓存",则表明之前服务未在运行,但此时已被开启;若返回"服务正在开启",则表明之前服务未在运行,现在正在开启过程中,需等待服务开启完毕。

② 调用手机系统API判断当前正在运行的服务中是否有鹰眼服务。

维持后台运行

通常使用轨迹追踪的应用都需要长时间后台运行,如果遇到进程被系统杀死的情况,开发者该如何处理呢?

① 省电模式:若手机开启了省电模式、各手机厂商定制的优化模式(如小米手机的神隐模式)、第三方安全应用的省电模式(如360手机卫士),则进程可能会被杀死。 处理策略为,用户在手机端关闭省电模式,或将APP加入这些模式的白名单。

② 内存不足:当手机系统内存不足时,会回收进程,直至内存充足时系统会自动重启进程。针对这种情况,可在APP内新增一个独立的进程B,定时查询鹰眼serviceA是否是否出于开启状态。当监听到鹰眼进程A被杀死,则重新开启鹰眼服务。但如果进程B同时也被系统回收,则该方法失效。

关于CPU休眠

手机锁屏后一段时间,cpu可能会进入休眠模式,此时无法严格按照采集周期获取定位依据,导致轨迹点缺失。避免这种情况的方式是APP持有电量锁(开发者可根据自身业务需求来决定是否采用此策略),最新版本的示例Demo中已按照持有电量锁的方式实现,开发者可参考。

stopTrace后缓存数据上传问题

调用stopTrace后,将立即停止采集轨迹,对于缓存数据此时有两种情况:

① 设备网络通信正常:将继续回传缓存的轨迹数据,直至数据回传完毕,鹰眼服务停止,返回回调信息。数据回传过程中,如果遇到网络中断或鹰眼服务被杀死,将会中断回传,但数据仍会存储在设备端,待下次StartTrace时,优先回传缓存数据,再回传新采集的数据。

② 设备网络通信中断:立即停止采集轨迹,同时将缓存数据会存储在设备数据库中,鹰眼服务停止,并返回回调信息。

退出应用时鹰眼服务存活问题

用户按下back键退出应用时,开发者可在MainActivity的onDestroy()方法中决定是否要继续追踪轨迹。

-退出应用时,停止追踪轨迹:在onDestroy()方法中调用stopTrace(),此时无论是否联网,stopTrace()执行完毕后,鹰眼进程都将被被停止,不再追踪轨迹。

-退出应用时,继续追踪轨迹:无需在onDestroy()中执行任何操作,由于activity和鹰眼服务的独立性,在退出应用时,仅会销毁Activity,并不会自动销毁鹰眼Service。因此,此时应用虽然退出了,但鹰眼服务仍在追踪轨迹。同理,当在设备的应用管理中,将正在运行的轨迹追踪应用停止,此时鹰眼service并不会停止,仍在后台运行