RemoteViews在实际开发中,主要用于在通知栏和桌面小部件的开发过程中。
通知栏主要是通过NotificationManager的notify方法来实现,它除了默认效果外,还可以另外定义布局。
桌面小部件则是通过AppWidgetProvider来实现的,AppWidgetProvider本质上是一个广播。
通知栏和桌面小部件的开发过程中都会用到RemoteViews,它们在更新界面时无法想在Activity里面那样去直接更新View,这是因为二者的界面都运行在其他进程中,确切来说是系统的SystemServer进程。
为了跨进程更新界面,RemoteViews提供了一系列set方法用来更新界面,并且这些set方法只是View全部方法的一部分(并不是支持所有的),而且RemoteViews中所支持的View类型也是有限的。
使用通知栏的话,定义Notification,会使用默认的布局,如果要使用自定的布局,需要给notification.contentView = remoteView指定remoteview,然后通过remoteView去更新界面。
使用桌面小部件的话,需要继承AppWidgetProvider类,并重写onUpdate方法。桌面小部件的更新也需要用到RemoteViews,更新方法主要是调用AppWidgetManager的updateAppWidget方法,传入appWidgetId跟RemoteViews。
AppWidgetProvider除了常用的onUpdate方法外,还有onEnabled,onDisabled,onDeleted以及onReceive。
其中比较重要的onReceive会自动根据广播的Action来调用其余的几个方法。(比如是更新,还是删除等等)。