[置顶] AlarmManager,Timer,Thread区别

	private void startAlarmService(){

		Intent intent =new Intent(this, AlarmServiceBroadcastReceiver.class);
		intent.setAction("repeating");
		sender=PendingIntent
				.getBroadcast(this, 0, intent, 0);
		//开始时间
		long firstime=SystemClock.elapsedRealtime();

		am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP
				, firstime, 20*1000, sender);
	}

AlarmManager,Timer,Thread区别

在android开发中,经常会用到定时触发某些操作,或者是间隔处理某件事

如闹钟,和后台定时请求数据:

    需要定时处理闹钟任务

    定时向服务器请求数据等

对于上述问题,我们可以通过定时器来完成,普遍的做法使用一个Thread来操作.也有使用Time实现定时操作

而android库里面也有一种全新的操作方式AlarmManager

那这几种方式有何区别呢

1.Thread:使用线程方式

2.Time是java的特性

3.AlarmManager:AlarmManager将应用与服务分割开来后,使得应用程序开发者不用 关心具体的服务,而是直接通过AlarmManager来使用这种服务。这也许就是客户/服务模式的好处吧。

第一种和第二种就不过多解释了,在此着重解释一下第三种

当我们在开发android程序时,有些用户会使用service来管理一些后台的任务,如网络操作,或者间断处理数据等,这些用户需要在用户关闭程序,或者关闭屏幕后也能处理后台任务,可android手机为了节省电池使用,当用户关闭屏幕后,会将cpu置于休眠状态,当休眠状态启动,我们的服务就处于暂停状态了.为了斛决这个问题,android库里就提供了一个AlarmManager的库,AlarmManager是客户/服务模式的模式,也就是说AlarmManager是由系统来管理,而不是我们应用程序的一部分,也就是说AlarmManager是全局的,当我们的程序启用AlarmManager后,就给系统注册了一个服务,该服务会根据你设置的参数定时的向你的应用程序发送消息(注意,此消息以广播方式发送).

AlarmManager的使用如下:

	private void startAlarmService(){

		Intent intent =new Intent(this, AlarmServiceBroadcastReceiver.class);
		intent.setAction("repeating");
		sender=PendingIntent
				.getBroadcast(this, 0, intent, 0);
		//开始时间
		long firstime=SystemClock.elapsedRealtime();

		am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP
				, firstime, 20*1000, sender);
</pre><pre name="code" class="java"><span style="white-space:pre">		</span>第一个参数设置cpu处理的方式:
<span style="white-space:pre">		</span><ol class="dp-j" style="line-height: 1.4em; margin: 0px 0px 1px; padding: 2px 0px; border: 1px solid rgb(209, 215, 220); list-style-position: initial; list-style-image: initial; color: rgb(43, 145, 175); font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', Consolas, 'Courier New', monospace; text-align: left; "><li class="alt" style="font-size: 1em; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(209, 215, 220); background-color: rgb(250, 250, 250); line-height: 18px; "><span style="color: black; "><span class="keyword" style="color: rgb(127, 0, 85); font-weight: bold; ">public</span>   <span class="keyword" style="color: rgb(127, 0, 85); font-weight: bold; ">static</span>   <span class="keyword" style="color: rgb(127, 0, 85); font-weight: bold; ">final</span>   <span class="keyword" style="color: rgb(127, 0, 85); font-weight: bold; ">int</span>  ELAPSED_REALTIME  </span></li><li style="font-size: 1em; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(209, 215, 220); background-color: rgb(250, 250, 250); line-height: 18px; "><span style="color: black; ">        <span class="comment" style="color: rgb(0, 130, 0); padding: 0px; margin: 0px; width: auto; border: 0px; ">// 当系统进入睡眠状态时,这种类型的闹铃不会唤醒系统。直到系统下次被唤醒才传递它,该闹铃所用的时间是相对时间,是从系统启动后开始计时的,包括睡眠时 间,可以通过调用SystemClock.elapsedRealtime()获得。系统值是3    (0x00000003)。</span>   </span></li><li class="alt" style="font-size: 1em; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(209, 215, 220); background-color: rgb(250, 250, 250); line-height: 18px; "><span style="color: black; ">  </span></li><li style="font-size: 1em; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(209, 215, 220); background-color: rgb(250, 250, 250); line-height: 18px; "><span style="color: black; ">        <span class="keyword" style="color: rgb(127, 0, 85); font-weight: bold; ">public</span>   <span class="keyword" style="color: rgb(127, 0, 85); font-weight: bold; ">static</span>   <span class="keyword" style="color: rgb(127, 0, 85); font-weight: bold; ">final</span>   <span class="keyword" style="color: rgb(127, 0, 85); font-weight: bold; ">int</span>  ELAPSED_REALTIME_WAKEUP  </span></li><li class="alt" style="font-size: 1em; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(209, 215, 220); background-color: rgb(250, 250, 250); line-height: 18px; "><span style="color: black; ">        <span class="comment" style="color: rgb(0, 130, 0); padding: 0px; margin: 0px; width: auto; border: 0px; ">//能唤醒系统,用法同ELAPSED_REALTIME,系统值是2 (0x00000002) 。</span>   </span></li><li style="font-size: 1em; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(209, 215, 220); background-color: rgb(250, 250, 250); line-height: 18px; "><span style="color: black; ">  </span></li><li class="alt" style="font-size: 1em; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(209, 215, 220); background-color: rgb(250, 250, 250); line-height: 18px; "><span style="color: black; ">        <span class="keyword" style="color: rgb(127, 0, 85); font-weight: bold; ">public</span>   <span class="keyword" style="color: rgb(127, 0, 85); font-weight: bold; ">static</span>   <span class="keyword" style="color: rgb(127, 0, 85); font-weight: bold; ">final</span>   <span class="keyword" style="color: rgb(127, 0, 85); font-weight: bold; ">int</span>  RTC  </span></li><li style="font-size: 1em; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(209, 215, 220); background-color: rgb(250, 250, 250); line-height: 18px; "><span style="color: black; ">        <span class="comment" style="color: rgb(0, 130, 0); padding: 0px; margin: 0px; width: auto; border: 0px; ">//当系统进入睡眠状态时,这种类型的闹铃不会唤醒系统。直到系统下次被唤醒才传递它,该闹铃所用的时间是绝对时间,所用时间是UTC时间,可以通过调用 System.currentTimeMillis()获得。系统值是1 (0x00000001) 。</span>   </span></li><li class="alt" style="font-size: 1em; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(209, 215, 220); background-color: rgb(250, 250, 250); line-height: 18px; "><span style="color: black; ">  </span></li><li style="font-size: 1em; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(209, 215, 220); background-color: rgb(250, 250, 250); line-height: 18px; "><span style="color: black; ">        <span class="keyword" style="color: rgb(127, 0, 85); font-weight: bold; ">public</span>   <span class="keyword" style="color: rgb(127, 0, 85); font-weight: bold; ">static</span>   <span class="keyword" style="color: rgb(127, 0, 85); font-weight: bold; ">final</span>   <span class="keyword" style="color: rgb(127, 0, 85); font-weight: bold; ">int</span>  RTC_WAKEUP  </span></li><li class="alt" style="font-size: 1em; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(209, 215, 220); background-color: rgb(250, 250, 250); line-height: 18px; "><span style="color: black; ">        <span class="comment" style="color: rgb(0, 130, 0); padding: 0px; margin: 0px; width: auto; border: 0px; ">//能唤醒系统,用法同RTC类型,系统值为 0 (0x00000000) 。</span>   </span></li><li style="font-size: 1em; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(209, 215, 220); background-color: rgb(250, 250, 250); line-height: 18px; "><span style="color: black; ">  </span></li><li class="alt" style="font-size: 1em; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(209, 215, 220); background-color: rgb(250, 250, 250); line-height: 18px; "><span style="color: black; ">        Public <span class="keyword" style="color: rgb(127, 0, 85); font-weight: bold; ">static</span>   <span class="keyword" style="color: rgb(127, 0, 85); font-weight: bold; ">final</span>   <span class="keyword" style="color: rgb(127, 0, 85); font-weight: bold; ">int</span>  POWER_OFF_WAKEUP  </span></li><li style="font-size: 1em; margin: 0px 0px 0px 38px; padding: 0px 0px 0px 10px; border-left-width: 1px; border-left-style: solid; border-left-color: rgb(209, 215, 220); background-color: rgb(250, 250, 250); line-height: 18px; "><span style="color: black; ">        <span class="comment" style="color: rgb(0, 130, 0); padding: 0px; margin: 0px; width: auto; border: 0px; ">//能唤醒系统,它是一种关机闹铃,就是说设备在关机状态下也可以唤醒系统,所以我们把它称之为关机闹铃。使用方法同RTC类型,系统值为4(0x00000004)。</span>  </span></li></ol>
	}
<pre name="code" class="java">public class AlarmServiceBroadcastReceiver extends BroadcastReceiver{

	@Override
	public void onReceive(Context context, Intent intent) {
		Log.d("AlarmServiceBroadcastReceiver", "收到一个闹钟定时器发来的广播333333");
		context.startService(new Intent(context, AlarmService.class));
	}

}
</pre>

微信公众平台,技术讨论[置顶] AlarmManager,Timer,Thread区别_第1张图片

 
 

你可能感兴趣的:([置顶] AlarmManager,Timer,Thread区别)