首页
JAVA笔记
数据库笔记
混乱记忆
小站记
您现在的位置
android 定时唤醒
简介: 手机休眠后网络会被断开,这里对休眠时如何发送网络数据提供常规解决方案
手机休眠的现象在前面已经将过了。这里主要是解决休眠状态下发送网络数据的问题。前面讲休眠状态时cpu会被停止运行,那我们要运行我们的程序怎么办?答案也很简单,当然是先唤醒再运行。

定时服务 AlarmManager
AlarmManager 是 android 系统中提供的一个定时服务,主要为闹钟应用提供服务,该服务在出发定时点时会唤醒手机休眠。

应用方案
既然 alarmManager 能够帮助我们唤醒手机,那么问题就简单了,直接编写代码调用 alarmManager 服务,然后通过该服务执行我们要执行的代码就可以了。
示例:
PendingIntent pend = PendingIntent.getService(App.getInstance(),0,new Intent(this.getActivity(),HttpRequestService.class), 0);  
AlarmManager am =(AlarmManager)this.getActivity().getSystemService(Context.ALARM_SERVICE);  
long firstTime = SystemClock.elapsedRealtime();  
am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, firstTime, 15*1000, pend); 

我们在 HttpRequestService 中执行我们需要执行的操作。

调用 AlarmManager 需要注意的参数
AlarmManager.RTC:硬件闹钟,不唤醒手机(也可能是其它设备)休眠;当手机休眠时不发射闹钟。
AlarmManager.RTC_WAKEUP:硬件闹钟,当闹钟发躰时唤醒手机休眠;
AlarmManager.ELAPSED_REALTIME:真实时间流逝闹钟,不唤醒手机休眠;当手机休眠时不发射闹钟。
AlarmManager.ELAPSED_REALTIME_WAKEUP:真实时间流逝闹钟,当闹钟发躰时唤醒手机休眠;
AlarmManager.POWER_OFF_WAKEUP:能唤醒系统,他是一种关机闹铃,就是说设备在关机状态下也可以唤醒系统,所以我们把它称为关机闹铃。

RTC和ELAPSED最大的差别
前者可以通过修改手机时间触发闹钟事件,后者要通过真实时间的流逝,即使在休眠状态,时间也会被计算。所以上面的代码使用 ELAPSED_REALTIME_WAKEUP
在使用 ELAPSED 时使用 SystemClock.elapsedRealtime() 获取时间
在使用 ETC 时使用 System.currentTimeMillis() 获取时间

最近更新