Android手机休眠后时间不准确的解决方案
上一篇讲到了计时的几种方法,在虚拟机中不会出现问题,但是在真机测试中,会遇到这样一种情况: 在手机进行休眠状态后,原来的睡60秒时间,大约变成了睡7分钟左右才再执行.这一直让我很不解,也没有发现代码上有什么问题.
后来发现别人也遇到了类似的问题. 发现常见的应用中,如游戏,播放器以及控制灯光显示中,都会有这种情况,
后来通过找了一个资料才知道如果要定时执行的话,要用AlarmManager,这是闹钟服务,Android手机中必须要保证AlarmManager的时钟跟真实时间同步的.所以在 Android手机休眠状态下,AlarmManager时间是不会变慢的. 以下介绍AlarmManager的基本使用.
AlarmManager简介及使用场景::
AlarmManager的使用机制有的称呼为全局定时器,有的称呼为闹钟。通过对它的使用,它的作用和Timer有点相似。
都有两种相似的用法:
(1)在指定时长后执行某项操作
(2)周期性的执行某项操作
AlarmManager对象配合Intent使用,可以定时的开启一个Activity,发送一个BroadCast,或者开启一个Service.
当你的应用不在运行,而此时你仍然需要你的应用去执行一些操作(比如,短信拦截),只有这种时候才使用AlarmManager, 其他正常情况下的,推荐使用Handler。
AlarmManager 生命周期:repeating AlarmManager一旦启动就会一直在后台运行(除非执行cancel方法),可以在“应用管理”中看到这个应用状态是正在运行。 “强行停止”可以让Alarmmanager停掉。尝试了几种任务管理器, 都只能重置计数器(确实释放内存了),但都无法关闭定时器,只有系统自带的“强行停止”奏效。
如果某个AlarmManager已经启动, 程序又再次去启动它,只要PendingIntent是一样,那么之前那个AlarmManager会被release掉。
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.yfz" android:versionCode="1" android:versionName="1.0" ><application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <activity android:label="@string/app_name" android:name=".AlarmTestActivity" > <receiver android:name="ActionBroadCast"> </receiver></activity</application>
其他用法以后待有时间补上,有部分内容可能不太准备,欢迎大家帮忙补充
- 3楼androidchuxueze昨天 21:23
- GOOD
- 2楼t12x3456昨天 18:46
- 呵呵,其实一开始我也没想到这问题,大家共同进步.
- 1楼xianming014天前 14:39
- 楼主写得不错,我转载了。n但是貌似不认真,中间那段代码残缺的……
- Re: t12x34563天前 16:04
- 呵呵,当时整理得比较匆忙,回头我专门补个例子吧