2

计算用户在特定活动中花费多长时间的最佳方法是什么?

提前致谢!

4

2 回答 2

4

开始/停止您在活动onResume()onPause()方法中的时间。还要安装一个 SCREEN_OFF / SCREEN_ON 广播接收器,这样您就知道屏幕何时打开和关闭,并在那里启用/禁用您的计时。

于 2012-12-21T20:12:27.143 回答
2

我想我会从这样的事情开始:

private static long mTotalTime;
private long mStartTime;

@Override
public void onPause() {
    super.onPause();
    mTotalTime += System.currentTimeMillis() - mStartTime;
}

@Override
public void onResume() {
    super.onResume();
    mStartTime = System.currentTimeMillis();
}

请注意,因为它使用 onPause/onResume,所以如果屏幕关闭、重新定向等,它也会“暂停”计时器。根据您的目的,您可能想要使用其他回调之一,例如 onCreate() 或onDestroy(),但请注意 onDestroy() 并不总是在从现有活动启动新活动时被调用。

您可能还希望将 mTotalTime 保存到 SharedPreferences 以便即使应用程序关闭也能保留它。也许是这样的:

private long mStartTime;

@Override
public void onPause() {
    super.onPause();
    int totalTime = getPreferences(0).getInt("TotalTime",0);
    getPreferences(0).edit().putInt("TotalTime", totalTime + System.currentTimeMillis() - mStartTime)
}

@Override
public void onResume() {
    super.onResume();
    mStartTime = System.currentTimeMillis();
}
于 2012-12-21T20:28:59.410 回答