Android开发艺术探索读书笔记 第五章 理解remoteViews

5.1.1

RemoteViews用于自定义Notification。
PendingIntent表示待定Intent,包含的意图由用户触发。

5.1.3

PendingIntent支持三种待定意图:启动Activity,启动Service和发送广播。
getActivity(Context context,int requestCode, Intent intent, int flags)
如果两个PendingIntent内部的Intent相同并且requestCode也相同,那么这两个PendingIntent是相同的。

如果两个Intent的CompontName和inter-filter都相同,那么这两个Intent就是相同的。

Flags的类型:
FLAG_ONE_SHOT:得到的pi只能使用一次,第二次使用该pi时报错
FLAG_NO_CREATE: 当pi不存在时,不创建,返回null
FLAG_CANCEL_CURRENT: 每次都创建一个新的pi
FLAG_UPDATE_CURRENT: 不存在时就创建,创建好了以后就一直用它,每次使用时都会更新pi的数据(使用较多)

如果notify方法的id是不改变,那么不管PendingIntent是否匹配,后面的通知都会直接替换前面的通知。
如果id改变,然后pi不匹配(requestCode与Intent相同称为匹配),那么这些通知之间不会相互干扰。

如果id改变并且pi匹配,根据pi的flag类型

5.2

RemoteViews构造函数:
public RemoteViews(String packageName,int layoutId)

RemoteView会通过Binder传递到SystemServer进程,因为RemoteViews实现了Parcelable接口,可以跨进程传输。
remoteViews内部记录提交的set方法,等到remoteviews被加载以后才执行。这样remoteview就可以在SystemServer进程中显示了。
每调用一次set操作,remoteviews中添加一个action。
当通过NotificationManager和AppWidgetManager来 提交更新时,这些Action会传到远程进程并执行。

setOnClickPendingIntent不能给ListView和StackView中的View设置单击事件,需要使用setPendingIntentTemplate和setOnClickFillInIntent组合。

文章目录
  1. 1. 5.1.1
  2. 2. 5.1.3
  3. 3. 5.2
,