BroadcastReceiver的生命周期

  BroadcastReceiver在android中是一特色功能.android系统的很多消息(如系统启动,新短信,来电话等)都通过BroadcastReceiver来分发.BroadcastReceiver的生命周期是短暂的,而且是消息一到达则创建执行完毕就立刻销毁的.为了说明这一点,我通过注册一个Alarm Service每7秒钟触发产生一次BroadcastReceive事件.

 

以下是BroadcastReceive的实现

protected static final class AlarmReceiver extends BroadcastReceiver{
		public AlarmReceiver()
		{
			//查看类创建的进程id和线程id
			Log.i("AlarmReceiver.AlarmReceiver()", Calendar.getInstance().getTime().toLocaleString());
			Log.i("AlarmReceiver.AlarmReceiver() -> pid", String.valueOf(android.os.Process.myPid()));
			Log.i("AlarmReceiver.AlarmReceiver() -> tid", String.valueOf(android.os.Process.myTid()));
		}
		@Override
		public void onReceive(Context context, Intent intent) {
			// TODO Auto-generated method stub
			Log.i("AlarmReceiver.onReceive()", Calendar.getInstance().getTime().toLocaleString());
		}
	}

 

通过一个"Start"按钮和一个"Stop"按钮来控制消息.

public void onClick(View arg0) {
		// TODO Auto-generated method stub
		switch(arg0.getId()){
		case R.id.btnStart:
			Log.i("current pid", String.valueOf(android.os.Process.myPid()));
			Log.i("current tid", String.valueOf(android.os.Process.myTid()));
			
			((AlarmManager)this.getSystemService(Context.ALARM_SERVICE))
				.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 7*1000, 
					 PendingIntent.getBroadcast(this, 0, new Intent(this,AlarmReceiver.class), 0)
					);
			break;
		case R.id.btnStop:
			((AlarmManager)this.getSystemService(Context.ALARM_SERVICE))
				.cancel(PendingIntent.getBroadcast(this, 0, new Intent(this,AlarmReceiver.class), 0));
			break;
		}
	}

 

打开logCat选择I,运行清理掉所有日志点击"Start"按钮

从上图可以看到AlarmReceiver类的实例是每触发一次就新建一次的,而且和程序是在同一个进程同一线程内.

 

转载于:https://my.oschina.net/droidwolf/blog/285417

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值