开发技巧

百度鹰眼轨迹Android SDK 开发技巧

本文针对开发者在使用鹰眼Android SDK 过程中较为关注的问题,如后台运行、内存释放等,给出了建议供开发者参考。

1.建立连接

轨迹追踪需要终端与服务端建立持续的连接,但这个过程会因为网络中断而失败。若第一次尝试连接失败,鹰眼SDK会在之后的10分钟内,每隔10s自动尝试连接,直至连接成功。若超过10分钟仍未建立连接,则自动开启定位缓存,此时鹰眼进程会持续监听网络广播,一旦联网则立即回传缓存数据。

2.维持后台运行

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

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

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


3.如何监控鹰眼service运行状态

判断鹰眼servcie运行状态有两种方法:

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

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

4.关于退出应用

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

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

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


5.关于横竖屏切换

横竖屏切换时,MainActivity中的onDestroy()方法会被自动调用。如果开发者采用的以上提到的3中的第一种模式,在onDestroy()方法中调用stopTrace(),则横竖屏切换时鹰眼Service会被销毁。通常可采用禁止横竖屏切换的方式避免这种情况,具体方法为:在manifest.xml文件中<activity>标签中添加android:screenOrientation="portrait"。

6.关于CPU休眠

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

7.关于耗电量

影响SDK的电量的主要因素为定位周期和GPS,其中定位周期鹰眼因素较大。在开启GPS和Wi-Fi的场景下,电量随定位频率变化趋势如下:

定位频率(秒) 耗电量(毫安时/小时)
5 150
30 140
60 120
120 80
150 60

8.关于流量

定位频率为5s,打包频率为30s时,鹰眼SDK上传轨迹平均流量为:0.5M/h

9.兼容Android M

当project.properties中的target低于android-23时(如target=Android-21),参照最新版本的示例Demo则demo即可直接在Android M的设备上运行。需要注意的是,必须打开【开启位置服务】开关(一般在【其他高级设置】-【位置信息】中),否则即便此时连上了wifi,SDK仍无法采集wifi和基站信息。


当target为android-23,则在开启轨迹服务前,需动态申请manifest.xml中涉及到的敏感权限。