Android 时间相关的坑

本文探讨了Android中关于时间统计的问题,包括System.currentTimeMillis()可能存在的用户篡改导致的错误,建议使用elapsedRealtime()进行更准确的耗时计算。同时提到了Timer在用户修改时间后可能导致的任务执行失败,推荐使用Handler的postDelay()替代。
摘要由CSDN通过智能技术生成

SystemcurrentTimeMillis

我们经常用这个接口来统计时间,比如

final long startTime = System.currentTimeMillis();
...
final long endTime = System.currentTimeMillis();
duration = endTime - startTime;

这端代码正常情况下是没有什么问题的,但是如果是在线上,用户量极大,且startTime和startTime的调用点不在一个地方,或者这个duration比较长时间,比如统计用户停留耗时,这个代码可能会收集到垃圾数据。因为currentTimeMillis本质上和日历时间一样,用户是可以修改的,比如在startTime和endTime中间用户将日历时间调回去了,那么得到的duration是负值。当然对于后台来说,可以过滤这些垃圾数据。但是为了更好的统计时间推荐使用elapsedRealtime。

elapsedRealtime

返回的是系统从启动到当前时间,所以这个时间做耗时duration统计是比较准确的,且不受用户调整日期行为影响。

timer问题

我们有时通过timer来执行一些定时任务

TimerTask timerTask = new TimerTask(){
	@Override
	public void run() {
		runOnUiThread(new Runnable() {
			@Override
			public void run() {
				System.out.println("
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值