在限时抢购的活动的,倒计时的当前时间,必须是获取的网络时间,不然系统工具获得只是手机的时间,是很有可能出现不一致的情况的~
CountDownTimer在使用的时候,需要在Activity销毁的时候,进行回收处理。mCountDownTimer.cancel();
可以考虑在项目初始化的时候,通过工具类+Timer计时器,一直保存一个同步的互联网时间。
String类型的php时间必须使用Long类型来转化,不然的话,2038年的时间就会超过int的最大值、、、
// String time = sdf.format((long) (Integer.parseInt(longString)) * 1000);
String time = sdf.format((long) (Long.parseLong(longString)) * 1000);
时间戳转化成日期
String time = format.format(new Date(vtime * 1000));
// String time = format.format(vtime);
// String time = format.format(new Date(vtime * 1000));
String time = format.format(new Date((long) vtime * 1000));
// LogUtils.e("mxg", "vtime == " + vtime + ";time == " + time);
tv_renewal_time.setText("有效期至:" + time.replace("-", "."));
注意:以后计算时间的间隔,全部使用SystemClock.elapsedRealtime()来进行比较;(可以考虑System.currentTimeMillis)
在Java中我们处理线程同步问题时,处理延迟可能会使用Thread类的sleep方法,这里抛开concurrent类的一些方法;
值得一提的是,这个类还提供了另外一个方法, public static void sleep(long ms),
这个方法就是封装了Thread.sleep方法,但是不会抛出InterruptedException
http://blog.youkuaiyun.com/tianfeng701/article/details/7562359
在Andriod中关于线程一部分中经常会遇到计算时间的操作,这里面应用较多的是SystemClock类,这个类仅仅是一个获取系统时间、运行时间的工具类。
这个类有两个主要的静态方法uptimeMillis()和 elapsedRealtime().
我们来看一下这两个函数的实际含义,以下是源码中的注释
Returns milliseconds since boot, not counting time spent in deep sleep.
This value may get reset occasionally
native public static long uptimeMillis();
Returns milliseconds since boot, including time spent in sleep.
native public static long elapsedRealtime();
由此可见,
uptimeMillis()返回的是系统从启动到当前处于非休眠期的时间。
elapsedRealTime()返回的是系统从启动到现在的时间。
值得一提的是,这个类还提供了另外一个方法, public static void sleep(long ms),
这个方法就是封装了Thread.sleep方法,但是不会抛出InterruptedException
-----------------------------------------------------------补充内容-------------------------------------------------------------------------------------------------------
所谓android深度睡眠,即屏幕关闭后,一段时间不做任何操作,不连接usb,然后在一定时间后,手机很多服务、进程都睡眠了,不再运行。
很多情况下,不管是我们自己使用时间间隔来做一些算法,或是调用系统的API,比如动画效果,都会需要基于时间间隔来做,通常做法是:记录开始时间 startTime,然后每次回调时,获取当前时间 currentTime,计算差值 = currentTime - startTime,而获取当前时间,系统提供了两种方法:
SystemClock.uptimeMillis 和 System.currentTimeMillis
这两种方法有何区别呢?
1. SystemClock.uptimeMillis() // 从开机到现在的毫秒数(手机睡眠的时间不包括在内);
2. System.currentTimeMillis() // 从1970年1月1日 UTC到现在的毫秒数;
但是,第2个时间,是可以通过System.setCurrentTimeMillis修改的,那么,在某些情况下,一但被修改,时间间隔就不准了。