读书人

Android PendingIntent的深入懂得

发布时间: 2012-06-29 15:48:47 作者: rapoo

Android PendingIntent的深入理解

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的核心代码如下:
??Android PendingIntent的深入懂得
我们可以看到它就是把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中执行的

?

转:http://www.devdiv.com/home.php?mod=space&uid=1&do=blog&id=2644

读书人网 >Android

热点推荐