1

我正在运行一个前台服务,它会及时对用户的应用程序使用情况进行采样。

我注意到该UsageStats getTotalTimeInForeground(..)函数有一个奇怪的行为 - 似乎当前前台应用程序的统计信息没有更新,直到它进入后台。

代码:

UsageStatsManager usageStatsManager = (UsageStatsManager)context.getSystemService(Context.USAGE_STATS_SERVICE);
Map<String, UsageStats> queryUsageStats = usageStatsManager.queryAndAggregateUsageStats(UsageStatsManager.INTERVAL_DAILY, 0, System.currentTimeMillis());
long totalTimeUsageInMillis = queryUsageStats.get("com.sample.app").
    getTotalTimeInForeground();

每次迭代后 -在前台totalTimeUsageInMillis时不受影响。com.sample.app一旦我离开com.sample.app- 我的服务获得更新的价值

我可以通过为当前运行的 (=foreground) 应用程序保留一个计数器并将其添加到结果中来解决此问题,直到用户切换应用程序,但我不希望增加应用程序的开销。

以下屏幕截图取自我构建的测试仪,显示了 2 次通话,间隔为 1 分钟:在此处输入图像描述

4

0 回答 0