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

原理

RemoteView的作用是在其他进程中显示并更新view界面。
这里写图片描述

大量的IPC操作会影响效率,为了解决这个问题,系统并没有通过Binder去直接支持View的跨进程访问,而是提供了一个Action的概念,Action代表一个view的操作。系统首先将view操作封装成Action对象并将这些对象跨进成传输到远程进程。接着在远程进程执行Action的具体操作。在我们的应用中每调用一次set方法,RemoteView中就会添加对应的Action对象,当我们通过NotificationManager和AppWidgetManager提交我们的更新时,这些Action对象就会传输到远程进程并在远程进程执行。

远程进程通过RemoteView的apply方法来进行view的更新操作。RemoteView的apply方法内部则会去遍历所有的Action对象并调用它们的apply方法,具体的View更新操作是由Action对象的apply方法来完成的。这样的好处是不用定义大量的Binder接口,其次通过在远程进程中批量执行RemoteView的修改操作从而避免了大量的IPC操作,这样就提高了程序的性能。

实际应用

两个应用,一个需要更新另外一个的界面,这时候可以使用AIDL,但是如果对界面的更新比较频繁,这时候会有效率问题,同时AIDL接口可能变得比较复杂,这时候采用RemoteView就没有这个问题了。但是RemoteView的缺点是仅支持一些常见的View。不支持自定义View.

RemoteView有两个方法,apply和reapply,两个方法的区别在于apply会加载布局并更新界面,而reapply置灰更新界面。

如果打算用RemoteView来实现两个应用之间的界面更新,那么还有一个问题,就是布局文件的加载问题。一个应用的资源id传递到另一个应用中很可能是无效的,因为两个应用中布局文件的资源id可能不完全一样,解决办法如下:
既然资源id不一样,我们就通过布局文件名称来加载布局文件,首先两个应用要提前约定好RemoteView中资源文件名称,然后在A中根据名称查找对应的布局文件并加载,接着再调用RemoteView的reapply方法即可将B中对View所做的一系列更新操作全部作用于A中加载的View上面。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值