HttpURLConnection 的具体使用步骤如图 3-1 所示:
图 3-1 HttpURLConnection 使用流程
由于涉及到网络访问,需要在 Manifest 文件中添加网络访问权限:
以上是对 HttpURLConnection 的原理以及具体使用的介绍,下面对 SDK 中网络请求的具体实现进行介绍。
3.2.1 网络相关配置
SDK 可以对数据上报进行一系列的配置,开发者可根据 App 的特点设置相应的配置,从而达到最高效的数据上报效果。SDK 的相关配置在初始化时完成,可以配置的参数如下:
mServerUrl:数据上报地址,采集的本地数据将上报到该地址; mFlushInterval:两次数据发送的最小时间间隔(单位毫秒),默认值为 15; mFlushBulkSize:本地缓存数据的最大条目数,当本地缓存条数达到 mFlushBulkSize 则会上报数据, 默认值为 100; mNetworkTypePolicy:网络上传策略,可配置为 3G、4G、5G、WIFI 等网络类型进行上报。
3.2.2 工作线程封装
SDK 数据上报是在子线程中完成的,当采集的数据满足上报策略时触发数据异步上报,上传任务的管理调度在 Worker 类中完成。在 Worker 初始化时,创建 HandlerThread 实例,HandlerThread 本质上是一个线程类,它继承自 Thread 类。HandlerThread 内有自己的 Looper 对象,可以进行 Looper 循环。通过获取 HandlerThread 中 Looper 对象传递给 Handler 对象,可以在 handleMessage 方法中执行异步任务。
AnalyticsMessageHandler 继承自 Handler,在 handleMessage 中接收 Worker 发送的消息并执行数据上报或删除。
在 HandlerThread 中的 Looper 对象,传递给 AnalyticsMessageHandler 对象,在 handleMessage 方法中实现异步网络任务。AnalyticsMessageHandler 代码实现如下:
private class AnalyticsMessageHandler extends Handler {
…
Worker() {
final HandlerThread thread =
new HandlerThread(“com.sensorsdata.analytics.android.sdk.AnalyticsMessages.Worker”,
Thread.MIN_PRIORITY);
<