5.关于RemoteViews

1.引入RemoteViews

1.1 android.widget.RemoteViews

android.widget.RemoteViews为一个View结构,实现了Parcelable接口,运行在系统进程SystemServer中,所以第三方应用是以跨进程通信的方式来更新RemoteViews. (简单理解,第三方应用将RemoteViews通过Intent传递给系统进程,系统进程去加载并更新其界面。)

public class RemoteViews implements Parcelable, Filter {
	...
}

1.2 应用场景主要有两个

1)Notification - NotificationManager
自定义通知需要用的RemoteViews来加载布局文件

2)Widget - AppWidgetManager
桌面小部件由AppWidgetProvider来实现,其本质为BroadcastReceiver,有4个步骤
a.定义小部件界面
b.定义小部件配置信息
c.定义小部件实现类
d.AndroidManifest中声明

1.3 Intent与PendingIntent区别

Intent是立刻发生的意图;
PendingIntent是将来某个不确定的时刻发生的意图,典型应用是RemoteViews的点击事件,PendingIntent支持3种待定意图。

2.内部机制

2.1 仅支持4种Layout以及若干View

FrameLayout / GridLayout / LinearLayout / RelativeLayout

 * <p>{@code RemoteViews} is limited to support for the following layouts:</p>
 * <ul>
 *   <li>{@link android.widget.AdapterViewFlipper}</li>
 *   <li>{@link android.widget.FrameLayout}</li>
 *   <li>{@link android.widget.GridLayout}</li>
 *   <li>{@link android.widget.GridView}</li>
 *   <li>{@link android.widget.LinearLayout}</li>
 *   <li>{@link android.widget.ListView}</li>
 *   <li>{@link android.widget.RelativeLayout}</li>
 *   <li>{@link android.widget.StackView}</li>
 *   <li>{@link android.widget.ViewFlipper}</li>
 * </ul>
 * <p>And the following widgets:</p>
 * <ul>
 *   <li>{@link android.widget.AnalogClock}</li>
 *   <li>{@link android.widget.Button}</li>
 *   <li>{@link android.widget.Chronometer}</li>
 *   <li>{@link android.widget.ImageButton}</li>
 *   <li>{@link android.widget.ImageView}</li>
 *   <li>{@link android.widget.ProgressBar}</li>
 *   <li>{@link android.widget.TextClock}</li>
 *   <li>{@link android.widget.TextView}</li>
 * </ul>
 * <p>Descendants of these classes are not supported.</p>

2.2 RemoteViews如何更新界面

RemoteViews通过Binder传递到SystemServer进程,更新界面是将view操作封装为Action传输到远程进程,在远程进程种执行Action对象的方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值