Android PendingIntent的深入理解
2011-1-15 03:27| 发布者: Vincent| 查看: 3949| 评论: 3
摘要: Intent比较简单,类似消息,发送给别的activity,别的activity会立即执行 我主要说说什么是PendingIntent以及它的执行过程 以alarm service为例: 1. activity请求一个alarm一般这样来做: # //创建一个Pend ...
Intent比较简单,类似消息,发送给别的activity,别的activity会立即执行
我主要说说什么是PendingIntent以及它的执行过程
以alarm service为例: 1. activity请求一个alarm一般这样来做: # //创建一个PendingIntent # Intent intent = new Intent(ALARM_ALERT_ACTION); # intent.putExtra(ID, id); # intent.putExtra(TIME, atTimeInMillis); # PendingIntent sender = PendingIntent.getBroadcast( # context, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT); # //获得AlarmMnager并注册一个新闹铃, # //一次性闹铃的设置 # # AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE); # am.set(AlarmManager.POWER_OFF_WAKEUP, atTimeInMillis, sender); 2. AlarmManager.set调用AlarmManagerService.set 3. AlarmManagerService.set的核心代码如下: 我们可以看到它就是把PendingIntent保存起来而已 4. alarm manager service会定时查看是否有alarm到期了,如果到期了做相应处理。 5. AlarmThread会调用 alarm.operation.send(mContext, 0, mBackgroundIntent.putExtra( Intent.EXTRA_ALARM_COUNT, alarm.count), mResultReceiver, mHandler); 也就是通过PendingIntent.send执行intent操作,alarm这个就会发送ALARM_ALERT_ACTION的broadcast。
补充说明: 1. PendingIntent重要特点是异步处理。 2. 另外有一个要说明的是PendingIntent.onFinished,它可以作为PendingIntent.send的一个参数, 我们知道PendingIntent.send一般是在service中执行,这个调用的send后,回调onFished类的onSendFinished,所以onSendFinished一般也是在service中执行的
|
|