美文网首页
RemoteViews简介与问答

RemoteViews简介与问答

作者: 龙在阿里 | 来源:发表于2016-12-15 11:09 被阅读36次

    RemoteViews不是当前进程的View,是属于SystemServer进程.应用程序与RemoteViews之间依赖Binder实现了进程间通信.RemoteViews使用最多的场合是通知栏和桌面小插件.

    RemoteViews运行在SystemServer进程,更新RemoteViews要通过Binder获取到对应的服务然后调用RemoteViews内部的apply方法加载更新布局.

    什么是RemoteView?

    其实就是一种特殊的view结构,这种view 能够跨进程传输。并且这种remoteview 还提供了一些方法 可以跨进程更新界面。具体在android里面 一个是通知 一个是桌面小部件。

    这2个就是remoteview 最直接的应用了

    小部件开发大概流程如何?

    android的小部件开发就全都是用的remoteviews。其实就是一个广播接收器+ui显示

    remoteView 支持所有的view类型吗?

    remoteview仅仅支持少部分系统自带的view。开发者的自定义view是一律都不支持的。

    简述remoteViews的原理?

    通知栏和widget 都是运行在 NotificationManagerService和AppWidgetService的,并且是在systemt server进程中。我们在apk代码里使用notificationmanager或者appwidgetmanager实际上都是通过binder 来进行与system server的进程间通信的。

    public class RemoteViews implements Parcelable, Filter {

    可以看到remotviews是继承了Parcelable接口。所以这个remoteviews会通过binder 传递到system server 这个系统进程里。然后系统进程会解析这个remotview 拿到他的包名和布局文件等信息 然后就通过layoutInflater 来加载这个布局了。

    对于system server来说  remoteview就好像是自己这个进程里的 资源一样,而对于调用者 也就是我们自己的apk程序员来说,这个view就显然是remoteviews 远程的了。并且值得注意的是,view的更新操作 是由action对象的apply方法来执行的!这一点千万要记住。

    基本流程就是这样,另外注意apply和reapply的区别,后者只更新界面 而前者还要加载布局。

    除了通知和widget 我们还能怎样使用remoteviews?

    remoteview既然是被设计用来跨进程更新ui的。所有跨进程更新ui的场景都可以使用他来做,这里给出2个范例。

    第一个范例:同一个apk下,2个进程 ,其中一个activity另外一个activity的ui。

    相关文章

      网友评论

          本文标题:RemoteViews简介与问答

          本文链接:https://www.haomeiwen.com/subject/afowmttx.html