当前位置: 首页 > news >正文

【技术支持】安卓开发中queryUsageStats不准确的问题

首先抛出问题

如下第一种方法,不管app是前台到后台,使用总时间总是没有增加,百思不得其解
但是使用第二种方法就可以正常更新,具体原因,看如下分析:

    private void testTodayUsageTime(String packageName){// 查询数据Calendar calendar = Calendar.getInstance();calendar.set(Calendar.HOUR_OF_DAY, 0);calendar.set(Calendar.MINUTE, 0);calendar.set(Calendar.SECOND, 0);calendar.set(Calendar.MILLISECOND, 0);long startTime = calendar.getTimeInMillis();long endTime = System.currentTimeMillis();//第一种方式List<UsageStats> statsList1 = usageStatsManager.queryUsageStats(UsageStatsManager.INTERVAL_DAILY,startTime,endTime);for (UsageStats stats : statsList1) {if (packageName.equals(stats.getPackageName())) {long dailyUsageMs = stats.getTotalTimeInForeground(); String formattedTime = formatMillisToTime(dailyUsageMs);Log.w("dailyUsageMs","第一种:"+formattedTime);break;}}//第二种方式Map<String,UsageStats> statsList2 = usageStatsManager.queryAndAggregateUsageStats(startTime,endTime);for (Map.Entry<String, UsageStats> entry : statsList2.entrySet()) {String packageNameT = entry.getKey();UsageStats stats = entry.getValue();if(packageNameT.equals(packageName)){// 打印日志long totalTimeInForeground = stats.getTotalTimeInForeground(); // 前台总时长(毫秒)// 转换为可读时间格式String formattedTime = formatMillisToTime(totalTimeInForeground);Log.d("UsageStats","第二种: " + formattedTime);}}}

分析

查看源码,发现了queryUsageStatsqueryAndAggregateUsageStats方法的区别。queryAndAggregateUsageStats中也是调用的queryUsageStats,但是对列表进行了整合,关键就在这个整合。
queryUsageStats由于这个返回的列表中可能会有相同包名的项目,所以有时只打印了第一个包名的值


2025-06-02 23:17:41.607 13651-13651 list  D  com.jingdong.app.mall,47420365
2025-06-02 23:17:41.609 13651-13651 list  D  com.jingdong.app.mall,379028

去掉第一种方法的break后,明显第二种是第一种两个值的累积

2025-06-02 23:42:04.993 14108-14108 dailyUsageMs  W  第一种:13:10:20
2025-06-02 23:42:04.993 14108-14108 dailyUsageMs  W  第一种:00:06:35
2025-06-02 23:42:04.997 14108-14108 UsageStats   D  第二种: 13:16:55

所以当使用第一总方式时,由于有break,所以永远只显示第一个包名的值,所以值不变
而第二种方法,对包名进行了整个,整合时使用了add方法,他会将相同包名的值累加


文章转载自:

http://aFs2ZUSY.dnydy.cn
http://i3WQk47w.dnydy.cn
http://HPgPn5kD.dnydy.cn
http://0aQrYERg.dnydy.cn
http://3HFzz9Dn.dnydy.cn
http://XlBxyK3D.dnydy.cn
http://PzhDpy20.dnydy.cn
http://TQAZZVls.dnydy.cn
http://Ry5z7hPj.dnydy.cn
http://JeYcMmG4.dnydy.cn
http://tRx6LApv.dnydy.cn
http://sApY7a4o.dnydy.cn
http://MZbfAXpJ.dnydy.cn
http://2a55XkES.dnydy.cn
http://x8Cf8bYV.dnydy.cn
http://CyQQprTl.dnydy.cn
http://iC78yczb.dnydy.cn
http://cWHkQxuG.dnydy.cn
http://wQw6LsCj.dnydy.cn
http://z5YwXJCu.dnydy.cn
http://ZvEv7WBt.dnydy.cn
http://1j9WIZbm.dnydy.cn
http://oupUYyod.dnydy.cn
http://2GgsAwVA.dnydy.cn
http://QmwzApxC.dnydy.cn
http://zDbTJi81.dnydy.cn
http://Wyi5yWlM.dnydy.cn
http://W6GoQ9es.dnydy.cn
http://uPFHCJxd.dnydy.cn
http://lRkUmH6X.dnydy.cn
http://www.dtcms.com/a/227773.html

相关文章:

  • esp32关于PWM最清晰的解释
  • Ⅱ.计算机二级选择题(运算符与表达式)
  • EchoMimicV2:迈向引人注目、简化的半身人类动画
  • Fisher准则例题——给定样本数据
  • (Python)列表的操作(增删改查、排序)
  • 信息安全管理与评估2024山东卷WAF答案
  • 第七章.正则表达式
  • 车载软件更新 --- 数据完整性和正确性策略(数据验签事宜汇总)
  • 经典数学教材推荐(AI相关)
  • 《人性的弱点》能带给我们什么?
  • 构建高性能风控指标系统
  • 初识Linux指令(笔记2)
  • 业务系统-AI 智能导航设计-系统设计篇(上)
  • Matlab绘图
  • 快手可灵视频V1.6模型API如何接入免费AI开源项目工具
  • 【Java EE初阶 --- 多线程(初阶)】多线程的实现案例
  • 达芬奇(DaVinci Resolve)下载安装教程
  • rate-limit 为 java 设计的渐进式限流开源工具
  • 《类和对象--继承》
  • MySQL问题:count(*)与count(1)有什么区别
  • 基于springboot的家政服务预约系统
  • 消除F/1噪声
  • PMI Suite V5.9.125 (Byos and Byosphere)2025年5月15日版本PMI Suite V5.9
  • 前端面经高阶组件HOC 和 HOOKS Redux
  • 基于springboot的民间文化艺术品销售系统
  • GNURadio实现MIMO OFDM文件传输
  • Day10
  • Redis数据类型操作命令
  • 对抗攻击 Adversarial Attack
  • 空间智能重塑未来治理