接上篇《android开发艺术探索》读书笔记(四)--View工作原理

No1:

RemoteViews使用场景:通知栏和桌面小部件

No2:

通知栏主要通过NotificationManager的notify方法来实现的

桌面小部件是通过AppWidgetProvider来实现的,AppWidgetProvider本质上是一个广播

No3:

通知的实现可以看我的另外一篇Notification通知

桌面小部件的实现可以看我的另外一篇桌面小部件开发

No4:

PendingIntent的了解可以看我的另外一篇PendingIntent

No5:

RemoteViews支持的类型如下:

Layout:FrameLayout、LinearLayout、RelativeLayout、GridLayout

View:AnalogClock、Button、Chronometer、ImageButton、ImageView、ProgressBar、TextView、ViewFlipper、ListView、GridView、StackView、AdapterViewFlipper、ViewStub

RemoteViews不支持它们的子类以及其他View类型,故也不支持自定义View

No6:

RemoteViews的一系列set方法是通过反射来完成的

No7:

通知栏和桌面小部件中的布局文件实际上是在NotificationManagerService以及AppWidgetService中被加载的,而它们运行在系统的SystemServer中,这就和我们的进程构成了跨进程通信的场景

No8:

RemoteViews的作用是在其他进程中显示并更新View界面。

No9:

RemoteVeiws会通过Binder传递到SystemServer进程,这是因为RemoteViews实现了Parcelable接口,因此它可以跨进程传输,系统会根据RemoteViews中的包名等信息去得到该应用的资源。然后会通过LayoutInflater去加载RemoteViews中的布局文件

No10:

通知栏和桌面小部件分别由NotificationManager和AppWidgetManager管理,而NotificationManager和AppWidgetManager通过Binder分别和SystemServer进程中的NotificationManagerService以及AppWidgetService进行通信。

No11:

从理论上来说,系统完全可以通过Binder去支持所有的View和View操作,但是这样做的话代价太大,因为View的方法太多了,另外就是大量的IPC操作会影响效率。

为了解决这个问题,系统并没有通过Binder去直接支持View的跨进程访问,而是提供了一个Action的概念,Action代表一个View操作,Action同样实现了Parcelable接口。

这样的好处是不需要定义大量的Binder接口,其次避免了大量的IPC操作,提高了程序的性能。

No12:

远程进程通过RemoteViews的apply方法来进行View的更新操作,RemoteViews的apply方法内部则会去遍历所有的Action对象并调用它们的apply方法,具体的View更新操作是由Action对象的apply方法来完成的。

No13:

RemoteViews的apply方法首先会通过LayoutInflater去加载RemoteViews中的布局文件(通过getLayoutId获得),加载完布局文件后会通过performApply去执行一些更新操作。

No14:

Action对象的apply方法就是真正操作View的地方。

No15:

调用RemoteViews的set方法时,并不会立刻更新它们的界面,而必须通过NotificationManager的notify方法以及AppWidgetManager的updateAppWidget才能更新它们的界面。

转载于:https://www.cnblogs.com/anni-qianqian/p/8259200.html

《android开发艺术探索》读书笔记(五)--RemoteViews相关推荐

  1. Android开发艺术探索读书笔记(一)

    首先向各位严重推荐主席这本书<Android开发艺术探索>. 再感谢主席邀请写这篇读书笔记 + 书评.书已经完整的翻完一遍了,但是还没有细致的品读并run代码,最近有时间正好系统的把整本书 ...

  2. Android开发艺术探索 读书笔记

    啥也不说了,@主席的<Android开发艺术探索>真是业界良心之作,不得不看!感谢主席,膜拜主席!主席主席,我要跟你生猴子!(>^ω^<) 读书笔记中若有任何问题请留言告知,谢 ...

  3. Android开发艺术探索读书笔记

    前言 Android开发艺术(这本书真的是艺术,太崇拜刚哥了,值得每一个做Android开发刷十遍的书) 1,Activity生命周期和启动模式 典型情况下的生命周期分析 onCreate() onS ...

  4. Android 开发艺术探索 - 读书笔记目录

    仅作为读书笔记使用,建议阅读原书. 书中代码部分已和现版本不符,建议对比最新版本学习. 读了这本书,越发认识到和大佬们的差距.嗯,加油吧. 过去の自分が今仆の土台となる 第 1 章 - Activit ...

  5. Android开发艺术探索读书笔记(二)

    首先感谢大家支持,昨天第一篇写出来之后反响很好,主席本人也非常赞赏(捂脸-),再接再厉,推出第二篇.这篇的主要内容是对两章View的内容进行总结.不得不说,自定义View是很多开发者的痛点,一方面我们 ...

  6. Android开发艺术探索读书笔记(第5章 RemoteView)

    原理 RemoteView的作用是在其他进程中显示并更新view界面. 大量的IPC操作会影响效率,为了解决这个问题,系统并没有通过Binder去直接支持View的跨进程访问,而是提供了一个Actio ...

  7. 《android开发艺术探索》笔记之Bitmap的加载和Cache

    <Android开发艺术探索>笔记之Bitmap的加载和Cache<一> 我放暑假前,就在图书馆借了一本<Android开发艺术探索>,这也是我看到很多人推荐的.之 ...

  8. 《Android 开发艺术探索》笔记2--IPC机制

    <Android 开发艺术探索>笔记2--IPC机制 思维导图 Android IPC简介 Android中的多进程的模式 IPC基础概念 Serializable接口 Parcelabl ...

  9. 《Android开发艺术探索》笔记目录

    该笔记以<Android开发艺术探索>为基础,结合Android 9.0代码和官方文档,修正了原书中表述不明确和过时的部分,同时加入了大量的个人理解. 13章,14章,15章是总结性的章节 ...

  10. Android开发艺术探索学习笔记 第二章IPC

    最近将之前工作做本地的学习笔记上传一下 这里是Android艺术开发探索的前三章内容 文章目录 1. android的多进程模式 2. IPC基础概念介绍 2.1 Serializable 2.2Pa ...

最新文章

  1. 2013首部著作封面抢先曝光
  2. [转]Android蓝牙开发浅谈
  3. 超暖心!美国消防员钻冰窟窿救狗狗
  4. FreeLibraryAndExitThread DLL中线程的安全退出
  5. webpack加载postcss,以及autoprefixer的loader
  6. Framework1.1 DataView 转DataTable
  7. 华为2019年校招(20届实习)机考题python版解答与思路(2019-3-13软件题)
  8. mysql怎么分组查询所有数据库_Mysql-4 分组查询与子查询
  9. 视觉SLAM十四讲学习笔记-第六讲-非线性优化的状态估计问题
  10. OO第三次电梯作业优化
  11. 工作5年,别人成了架构师,你却还在基层打滚
  12. Sort代码详解学习
  13. 无法安装程序包“xxx”。你正在尝试将此程序包安装到目标为“.NETFramework,Version=v4.5”的项目中
  14. Hanselminutes Podcast 244-Benjamin van der Veen的Kayak,OWIN,开源Web服务器等
  15. Unity il2cpp new 内存分配过程
  16. iwanna 关卡设计(挖坑)指南
  17. CNZZ后台偷偷跑广告
  18. Linux环境部署:开启电脑虚拟化
  19. ORACLE应用产品和SAP、SSA、SYMIX产品的比较分析
  20. day073 项目_IT橘子爬虫

热门文章

  1. java播放声音类和一个简单示例
  2. 一次函数的斜率公式_【海广教育数学口诀】初中数学学不会?公式这样记,让你做题效率翻倍!...
  3. matlab极坐标下的二维傅里叶变换_形象理解二维傅里叶变换
  4. 解析http头部和c++string的高级使用技巧
  5. rtsp直接转http fmp4
  6. json转为tfrecord格式文件怎么转_word怎么转换成pdf格式?这样转很方便
  7. 95-33-020-ChannelHandler-ChannelHandler简介
  8. 【Elasticsearch】es 报错 no such index index_not_found_exception
  9. 【es】es API源码分析
  10. 【Yarn】Yarn : 日志管理