开发艺术探索--理解RemoteViews

来源:互联网 发布:javascript 循环数组 编辑:程序博客网 时间:2024/06/06 02:00

<<艺术探索读书笔记>>

第五章,理解RemoteViews

RemoteViews的应用
RemoteViews的内部机制
RemoteViews的意义

应用

RemoteViews字面意思是一个远程View,可以在其他进程中显示.使用场景是 通知栏和桌面小部件.

  1. 通过应用的包名和布局文件的资源id即可创建RemoteViews对象,
  2. 通知栏通过NotificationManager.notify实现,小部件通过APPWidgetProvider(广播)实现.
  3. RemoteViews运行在系统的SystemServer进程,需要通过RemoteViews提供的一系列方法来更新View.
  4. PendingIntent表示一种待触发意图.
  5. 桌面小部件需要在清单文件中配置APPWIDGET_UPDATE.
  6. onReceive会根据Action来分发广播/
  7. PendingIntent是一种待定意图,包含三种类型: Activity,Service,BroadCast

相关参考:PendingIntent

内部机制

  1. RemoteViews只支持一些常见的View,不支持自定义View,否则会抛出异常.
  2. RemoteViews提供的一系列set方法都是通过反射来调用的
  3. 通知栏和桌面小部件的布局文件是通过NotificationManagerServiceAPPWidgetService中被加载的,通过Binder进行通信.
  4. 系统会将对View的操作封装到Action(实现了Parcelable接口)中,每调用一次set就会添加一个对应的Action,
  5. 通过notify或者updateAppWidget才更新界面,调用RemoteViewsapplyreApply方法来更新View
  6. apply: 加载布局并更新界面,reApply之更新界面.(方法内部反射调用更新方法)
  7. 除了ReflectiinAction外,还有其他Action,如TextViewSizeAction
  8. setOnClickPendingIntent只能给普通View设置click事件,对ListViewStackView中的item设置click事件则必须将setPendingIntentTemplatesetOnClickFillInIntent组合使用.

RemoteViews意义

  1. 实际场景: 一个应用更新另一个应用中的某个界面
  2. 通过资源id可能是无效的,只能约定好资源名称, Android之通过资源名称获取资源Id
0 0
原创粉丝点击