android 统计应用,Android应用统计-使用时长及次数统计(四)

本文解析了Android系统中UserUsageStatsService如何记录和查询应用使用时长与次数。通过reportEvent函数记录事件,数据最终通过persistActiveStats写入文件。记录时间采用相对时间,如usageStats.mLastTimeUsed - stats.beginTime。文章重点讨论了数据写入XML文件的流程。
摘要由CSDN通过智能技术生成

关键字: 应用统计 Android源码 应用使用时长 应用使用次数

上篇文章讲到LocalService以及BinderService都是调用了UserUsageStatsService的相关函数接口,实现相关功能。以下,主要分为记录和查询两个方面对UserUsageStatsService进行解析。

数据的记录

上篇文章曾讲到,不论是Event还是ConfigurationChange,都是调用UserUsageStatsService.reportEvent(event)这一函数,用来记录event和config数据。

void reportEvent(UsageEvents.Event event) {

if (DEBUG) {

Slog.d(TAG, mLogPrefix + "Got usage event for " + event.mPackage

+ "[" + event.mTimeStamp + "]: "

+ eventToString(event.mEventType));

}

if (event.mTimeStamp >= mDailyExpiryDate.getTimeInMillis()) {

// Need to rollover

//切换文件(因为一个文件仅记录当天的数据,如果数据的时间超过了当天的标记时间,则需要新建另一文件,记录第二天的数据)

rolloverStats(event.mTimeStamp);

}

final IntervalStats currentDailyStats = mCurrentStats[UsageStatsManager.INTERVAL_DAILY];

final Configuration newFullConfig = event.mConfiguration;

if (event.mEventType == UsageEvents.Event.CONFIGURATION_CHANGE &&

currentDailyStats.activeConfiguration != null) {

// Make the event configuration a delta.

event.mConfiguration = Configuration.generateDelta(

currentDailyStats.activeConfiguration, newFullConfig);

}

// Add the event to the daily list.

//将event数据计入统计数据中。

if (currentDailyStats.events == null) {

currentDailyStats.events = new TimeSparseArray<>();

}

currentDailyStats.events.put(event.mTimeStamp, event);

//依次更新日,周,月,年的统计数据

for (IntervalStats stats : mCurrentStats) {

if (event.mEventType == UsageEvents.Event.CONFIGURATION_CHANGE) {

stats.updateConfigurationStats(newFullConfig, event.mTimeStamp);

} else {

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值