RemoteViews介绍

来源:互联网 发布:淘宝清关身份证删除 编辑:程序博客网 时间:2024/04/29 05:01

一、RemoteViews的应用


1、在通知栏上的应用

1)通过构造方法RemoteViews(当前包名,布局文件ID),新建一个RemoteViews对象。
2)通过一系列set方法,更新布局。
3)通过notification.contentView = remoteViews,完成通知栏布局的设定。

2、在桌面小部件上的应用

1)定义Widget的布局:在res/layout文件下定义
2)定义Widget的配置信息:在res/xml文件下定义,而且根元素为appwidget-provider
3)定义Widget的实现类:这个类需要继承AppWidgetProvider,
4)在Manifest.xml文件中声明Widget,根元素为receiver,其中:
meta-data要设置属性 android:name="android.appwidget.provider"     android:resource="@xml/widget_provider_info">,
intent-filter要设置属性 <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />


AppWidgetProvider中的主要方法:
  • 1)onEnable:当窗口小部件第一次添加到桌面时会调用。
  • 2)onUpdate:小部件被添加时或者每次小部件更新时会调用。
  • 3)onDeleted:每删除一次桌面小部件jiuhuidiaoy。
  • 4)onDisabled:当最后一个桌面小部件被删除时会调用。
  • 5)onReceive:广播的内置方法。

3、PendingIntent介绍

1)概念

PendingIntent是在将来某个不确定时刻发生,一般用来给RemoteViews添加点击事件,而Intent是立刻发生。

2)支持的Intent:

  • -getActivity(Context context,int requestCode,Intent intent,int flags):跳转到Activity
  • -getService(Context context,int requestCode,Intent intent,int flags):跳转到Service
  • -getBroadcast(Context context,int requestCode,Intent intent,int flags):跳转到Broadcast

3)flags参数:

  • -FLAG_ONE_SHOT:PendingIntent只能被使用一次,然后就被自动取消
  • -FLAG_NO_CREATE:PendingIntent不会主动创建,如果当前PendingIntent不存在,获取PendingIntent失败
  • -FLAG_CANCEL_CURRENT:PendingIntent如果已经存在,那么它会被取消,然后被新来的替代。
  • -FLAG_UPDATE_CURRENT:PendingIntent如果已经存在,那么它们会被更新。

4)PendingIntent的匹配规则:

  • Intent相同,requestCode相同,两个PendingIntent就是匹配的。
  • Intent匹配规则:ComponentNme和intent-filter相同。

注意:
  • 1)如果manager.notify(id,notification)的id一直不变,那么不管PendingIntent是否匹配,新通知都会替换前面的通知。
  • 2)如果manager.notify(id,notification)的id每次都不同
  •  -当PendingIntent不匹配时,不论使用哪种标记位,这些通知都不会互相影响。
  •  -当PendingIntent匹配时,根据标记位产生不同影响。

二、RemoteViews的内部机制

 

1、RemoteViews支持的View类型

1)Layout:FrameLayout、LinearLayout、RelativeLayout、GridLayout
2)View;AnalogClock、Button、Chronometer、ImageButton、ImageView、ProgressBar、TextView、ViewFlipper、ListView等

2、内部机制

在本地进程中进行RemoteViews的操作,这些操作被转换成一个个Action对象,然后添加到Action集合中,这个集合附在RemoteViews中,当通过NotificationManager和AppWidgetManager来提交更新任务时,RemoteViews会通过Binder传递到远程进程SystemServer,在远程进程中,RemoteViews的apply方法进行更新操作,内部调用Action的apply方法进行实际的更新。

注意:
1)关于点击事件,RemoteViews中只支持发起PendingIntent,不支持onClickListener那种模式。
2)setOnClickPendingIntent用于给普通View设置单击事件,要给ListView和StackView中的item添加点击事件,则必须将setPendingIntentTemplate和setOnClickFillIntent组合使用。

0 0
原创粉丝点击