RemoteViews

远程视图;
意义:跨进程Ui的更新。
RemoteViews—-Binder–SystemServer—set(反射)
Action—–Binder—-NotificationManager/AppWidgetManager
构造方法:RemoteViews remoteViews = new RemoteViews(getPackageName(), R.layout.layout_remoteview);
主要应用:
1.Notification。Notification的自定义View只能使用setTextViewText, setImageViewResource, setOnClickPendingIntent等固定方法来设置View,不能像操作普通View的方式来操作。

2.AppWidgetProvider

a.本质是一个广播,配置步骤:定义界面xml,定义配置信息xml,定义实现类(继承AppWidgetProvider),AndroidManifest中声明。

b.重要回调:onEnable,第一次被添加时调用,只有一次;onUpdate,添加或更新时回调;onDelete,每次删除时回调;onDisable,最后一次删除时回调;onReceive,接收广播的action。

3.
PendingIntent

a.
典型的使用场景就是和RemoteViews的点击事件配合使用;

b.
支持三种待定Intent:Activity,Service和Broadcast

c.
PendingIntent相同的定义:内部的Intent和requestCode都相同。Intent相同的定义:两个Intent的componentName和intent-filter相同(不包括extras)

d.
flag定义:FLAG_NO_CREATE,基本不使用;FLAG_ONE_SHOT,只响应一次点击,以第一个为准,后续的会全部和第一条保持一致,任意一条被触发,其他的都cancel;FLAG_CANCEL_CURRENT,只响应最新的点击,前面的相同的PendingIntent都会被cancel,只有最新的可用;FLAG_UDPATE_CURRENT,前面的PendingIntent**都会被更新**(它们Intent中的extras都会被更新)
内部机制:实现了Parcelable接口,由binder机制来更新服务端的remoteViews,操作保存到通过action的 list中。
真正操作View的方法remoteviews.apply和reapply,前者会加载布局并更新界面,后者则只更新界面。
应用:不用应用之间的界面更新。跨进程的RemoteViews传递,模拟通知栏的实现。注意不同应用间RemoteViews的id不同,需要约定名称然后重新通过Resource.getIdentifier来获取。

RemoteViewsService,是管理RemoteViews的服务。
一般,当App Widget 中包含“GridView、ListView、StackView等”集合视图时,才需要使用RemoteViewsService来进行更新、管理。详细参考:链接内容

你可能感兴趣的:(RemoteViews)