我正在尝试使用每个应用程序获取过去 30 天使用的流量的统计信息NetworkStatsManager
,因此我编写了如下代码:
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
NetworkStatsManager networkStatsManager = (NetworkStatsManager) getActivity().getSystemService(Context.NETWORK_STATS_SERVICE);
NetworkStats networkStats = null;
Log.d("CCC","start----"+System.currentTimeMillis());
networkStats = networkStatsManager.querySummary(ConnectivityManager.TYPE_WIFI,"",
System.currentTimeMillis()-2592000000L,
System.currentTimeMillis());
Log.d("CCC","END-"+System.currentTimeMillis());
} catch (RemoteException e) {}
NetworkStats.Bucket bucket = new NetworkStats.Bucket();
while (networkStats!=null && networkStats.hasNextBucket()) {
networkStats.getNextBucket(bucket);
Log.d("CCC",bucket.getUid()+"---"+bucket.getTxBytes()+"---"+bucket.getRxBytes());
}
});
thread.start();
返回的结果似乎是正确的,但问题是,查询需要太多时间来响应 -通常是 25 秒- 如果我想同时获得TYPE_WIFI
互联网TYPE_MOBILE
使用情况,它将超过 50 秒,这不是一件好事。那么还有另一种方法可以做到这一点吗?或者我在这里做错了什么导致了这种延迟?先感谢您。