转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/112546517
本文出自【赵彦军的博客】
在Android中经常有统计页面停留时长的需求,先看看以前的实现代码:
class MainActivity2 : AppCompatActivity() {
var startTime:Long = 0
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main2)
//获取页面开始时间
startTime = System.currentTimeMillis()
}
override fun onPause() {
super.onPause()
//获取页面结束时间
var endTime = System.currentTimeMillis()
//计算停留时长
var stayTime = endTime - startTime
}
}
System.currentTimeMillis()
是获取当前系统时间戳,如果用户自行修改系统时间,那么这个时间戳就会改变,所以 System.currentTimeMillis()
获取的时间是不可靠的。
那肿么办?
使用 SystemClock.elapsedRealtime()
, 此方法可以获取 Android
设备的开机时长,包括睡眠时间,也就是说调用此方法可以获取设备开机时到调用此方法时的完整时间。
注意:此方法是与时间戳无关的,不管设备系统在这个时间段是否更新校验时间。
使用 SystemClock.elapsedRealtime()
后的完整代码如下:
package com.zhaoyanjun
import android.os.Bundle
import android.os.SystemClock
import androidx.appcompat.app.AppCompatActivity
class MainActivity2 : AppCompatActivity() {
var startTime:Long = 0
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main2)
//获取页面开始时间
startTime = SystemClock.elapsedRealtime()
}
override fun onPause() {
super.onPause()
//获取页面结束时间
var endTime = SystemClock.elapsedRealtime()
//计算停留时长
var stayTime = endTime - startTime
}
}