https://www.linuxidc.com/Linux/2011-11/48325p2.htm
文档中对System.currentTimeMillis()进行了相应的描述,就是说它不适合用在需要时间间隔的地方,如Thread.sleep, Object.wait等,因为可以通过System.setCurrentTimeMillis来改变它的值。
要用时间间隔,推荐使用SystemClock中的相关方法。
- SystemClock.currentThreadTimeMillis(); // 在当前线程中已运行的时间
- SystemClock.elapsedRealtime(); // 从开机到现在的毫秒书(手机睡眠(sleep)的时间也包括在内)
- SystemClock.uptimeMillis(); // 从开机到现在的毫秒书(手机睡眠的时间不包括在内)
- SystemClock.sleep(100); // 类似Thread.sleep(100);但是该方法会忽略InterruptedException
- SystemClock.setCurrentTimeMillis(1000); // 设置时钟的时间,和System.setCurrentTimeMillis类似
- // 时间间隔
- long timeInterval = SystemClock.uptimeMillis() - lastTime;
- // do something with timeInterval
- SystemClock.currentThreadTimeMillis(); // 在当前线程中已运行的时间
- SystemClock.elapsedRealtime(); // 从开机到现在的毫秒书(手机睡眠(sleep)的时间也包括在内)
- SystemClock.uptimeMillis(); // 从开机到现在的毫秒书(手机睡眠的时间不包括在内)
- SystemClock.sleep(100); // 类似Thread.sleep(100);但是该方法会忽略InterruptedException
- SystemClock.setCurrentTimeMillis(1000); // 设置时钟的时间,和System.setCurrentTimeMillis类似
- // 时间间隔
- long timeInterval = SystemClock.uptimeMillis() - lastTime;
- // do something with timeInterval
android.os.PowerManager
PowerManager的flag的意思:
- // PowerManager的一般用法,请求和释放唤醒锁
- PowerManager powerMgr = (PowerManager)
- getSystemService(Context.POWER_SERVICE);
- int flags = PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP;
- WakeLock wakeLock = powerMgr.newWakeLock(flags, "for debug purpose tag");
- wakeLock.acquire(); // 获取唤醒锁
- wakeLock.release(); // 释放唤醒锁
- // 在游戏中,会将acquire放在onResume中;将release放在onPause,这样在程序运行时就可以保持屏幕常量;在程序处在后台时,就恢复原来的设置。
- // PowerManager的其它api的使用
- powerMgr.goToSleep(SystemClock.uptimeMillis() + 100); // 100ms后进入睡眠
- powerMgr.isScreenOn(); // 屏幕是否亮着
- powerMgr.userActivity(SystemClock.uptimeMillis()+100, true); // 相当于按home键,会引起从睡眠激活
- // WakeLock的其它api
- wakeLock.acquire(1000); // 获取唤醒锁,并在1000ms后释放
- wakeLock.isHeld(); // 当前是否持有唤醒锁
- // 是否使用引用计数,默认是启用的。引用计数应该就是第一次请求为1,第二次加1,再一次再加1。
- // 在释放时,只有引用计数为0时才被视为完全释放(所以要多次调用release)
- wakeLock.setReferenceCounted(true);
- // PowerManager的一般用法,请求和释放唤醒锁
- PowerManager powerMgr = (PowerManager)
- getSystemService(Context.POWER_SERVICE);
- int flags = PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP;
- WakeLock wakeLock = powerMgr.newWakeLock(flags, "for debug purpose tag");
- wakeLock.acquire(); // 获取唤醒锁
- wakeLock.release(); // 释放唤醒锁
- // 在游戏中,会将acquire放在onResume中;将release放在onPause,这样在程序运行时就可以保持屏幕常量;在程序处在后台时,就恢复原来的设置。
- // PowerManager的其它api的使用
- powerMgr.goToSleep(SystemClock.uptimeMillis() + 100); // 100ms后进入睡眠
- powerMgr.isScreenOn(); // 屏幕是否亮着
- powerMgr.userActivity(SystemClock.uptimeMillis()+100, true); // 相当于按home键,会引起从睡眠激活
- // WakeLock的其它api
- wakeLock.acquire(1000); // 获取唤醒锁,并在1000ms后释放
- wakeLock.isHeld(); // 当前是否持有唤醒锁
- // 是否使用引用计数,默认是启用的。引用计数应该就是第一次请求为1,第二次加1,再一次再加1。
- // 在释放时,只有引用计数为0时才被视为完全释放(所以要多次调用release)
- wakeLock.setReferenceCounted(true);