dog*_*dog 4 android android-networking okhttp
我试图具体弄清楚我使用 OkHttpClient 发送的请求使用了我的应用程序的数据使用量,并且我发现我可以使用TrafficStats来标记线程,然后使用该标记查看它的网络活动。
如果我做类似的事情
TrafficStats.setThreadStatsTag(1234);
okHttpClient.execute(request);
Run Code Online (Sandbox Code Playgroud)
然后它实际上将其标记为“ok”(ish),但是当我使用异步方法(okHttpClient.enqueue(request))时,它没有(这很明显,尽管我希望他们对此有支持)。
所以我尝试了几件事:
有任何想法吗?
我认为 TrafficStats.setThreadStatsTag() 是针对线程的,所以也许我们可以为 okhttp 客户端添加一个拦截器。
private static class TrafficStatInterceptor implements Interceptor {
int mTrafficTag;
TrafficStatInterceptor(int trafficTag) {
mTrafficTag = trafficTag;
}
@Override
public Response intercept(Chain chain) throws IOException {
if (mTrafficTag > 0) {
TrafficStatUtils.setThreadStatsTag(mTrafficTag);
} else {
Log.w(TAG, "invalid traffic tag " + mTrafficTag);
}
return chain.proceed(chain.request());
}
}
Run Code Online (Sandbox Code Playgroud)
然后只需添加这个拦截器
OkHttpClient.Builder client = new OkHttpClient.Builder();
client.addNetworkInterceptor(new TrafficStatInterceptor(trafficTag));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3557 次 |
| 最近记录: |