什么是RemoteViews
RemoteViews 是一个远程 View,所谓的远程指的是这个 View 显示在其他的进程中(在该应用程序的进程之外),最常见的用法是显示在 SystemServer 进程中,例如通知栏的自定义 View 以及桌面小部件。同时,RemoteViews 表示的是一个 View 结构,它提供了一组基础的操作(set方法)用于跨进程更新它的界面。
RemoteViews的内部机制
由于RemoteViews主要用于通知栏和桌面小部件之中,这里就通过它们来分析 RemoteViews 的工作过程。我们知道,通知栏和桌面小部件分别由 NotificationManager 和 APPWidgetManager 管理,而 NotificationManager 和 APPWidgetManager 通过 Binder 分别和 SystemServer 进程中的 NotificationManagerService 和 APPWidgetService 进行通信。由此可见,通知栏和桌面小部件中的布局文件实际上是在 NotificationManagerService 和 APPWidgetService 中被加载的,而它们运行在系统的 SystemServer 中,这就和我们的进程构成了跨进程通信的场景。
1.首先 RemoteViews 会通过Binder传递到 SystemServer 进程中
RemoteViews 这个类是实现了Parcelable接口的,因此可以跨进程传输。
public class RemoteViews implements Parcelable, Filter {
2.然后系统会根据RemoteViews中