RemoveViews的应用和原理
《Android开发艺术探索读书笔记》
概念
RemoteView是一个可以在其他进程中显示的View结构。
RemoteViews提供了一组基础的操作用于跨进程更新它的界面。
应用场景
-
通知栏
-
桌面小部件
RemoteViews的应用
通知栏——NotificationManager
使用RemoteViews
实现自定义视图的效果
桌面小部件——AppWidgetProvider
使用RemoteViews
实现桌面小部件的视图
由于二者的View
(通知栏的自定义视图和桌面小部件的视图)都运行在SystemServer进程中,因此无法直接在Activity
(主进程)中更新View
。
RemoteViews
提供了一系列set
方法来控制跨进程更新界面,解决了二者更新View
的困难。
RemoteViews在通知栏上的应用
创建RemoteViews
来实现自定义布局,然后设置到notification
中,随后就能通过RemoteViews
的set
方法来更新视图。
RemoteViews remoteViews = new RemoteViews(getPackageName(), R.layout.layout_notification);
remoteViews.setTextViewText(R.id.msg, "custom_notification");// 设置自定义视图的TextView的值
remoteViews.setImageViewResource(R.id.icon, R.drawable.icon);// 设置自定义视图的ImageView的值
PendingIntent j2Main = PendingIntent.getActivity(this, 0, new Intent(this, MainActivity.class), PendingIntent.FLAG_UPDATE_CURRENT);
remoteViews.setOnclickPendingIntent(R.id.button, j2Main);
Notification notification = new NotificationCompat.Builder(this, "custom_view")
.setCustomContentView(remoteViews)//设置自定义视图
...
.build();
RemoteViews在桌面小部件上的应用
AppWidgetProvider
是Android
提供的用于实现桌面小部件的类,本质是一个广播,即BroadcastReceiver
。
桌面小部件的开发步骤
-
定义小部件界面
R.layout.widget
-
定义小部件配置信息
res/xml/appwidget_provider_info.xml
,包括指定小部件使用的初始化布局,设定小部件的最小尺寸 和 小部件的自动更新周期(单位毫秒)。 -
定义小部件的实现类
AppWidgetProvider
-
在
AndroidManifest.xml
中声明小部件(作为receiver)
小部件实现类常用的方法:
-
onEnabled
:当小部件第一次添加到桌面时被调用,可以添加多次,但只在第一次调用。 -
onUpdate
: 小部件被添加时 或 更新时 都会调用。 -
onDeleted
: 每删除一次小部件就调用一次。 -
onDisabled
: 当最后一个该类型的小部件被删除时调用。 -
onReceive
: 广播的内置方法,用于分发具体的事件给其他类。根据接收到的Intent