Widget原理

7 篇文章 0 订阅
1 篇文章 0 订阅

    在android系统中widget主要由三部分组成, AppWidgetProvider,AppWidgetHost和AppWidgetService。一般三个模块分别驻留在不同的进程中,AppWidgetProvider提供widget处理逻辑,当widet想更新显示时,通过AppWidgetManager(AppWidgetManager是对AppWidgetService的包装)调用AppWidgetHost更新显示。AppWidgetHost负责显示(比如Launcher),当用户在HostView上点击widget后,AppWidgetService会将事件通过broadcast发送给AppWidgetProvider处理。AppWidgetService负责协调和管理widget。

AppWidget framework通过broadcast intents和你的widget沟通,例如当需要更新Widget的时候。透过使用RemoteViews构建和发送。RemoteViews将Widget的layout和特定内容包装后,借由IPC传送到Launcher,最后显示到桌面上。


RemoteViews并不是一个真正的View,而只是一个用于整合Widget里layout呈现与view组件行为的一个Wrapper class(也就是appWidget所要长得样子),透过RemoteView把建立该Widget需要的resource ID和各个组件的事件封装起来。 RemoteViews会通过进程间通信机制传递给AppWidgetHost。


因为activity跟widget的运作机制的不同,应用程序AP里的Avtivity要更新组件时,可以直接取得该组件进行更新。而因为Widget架构是继承appWidgetProvider,所以每个widget就是一个BroadcastReceiver。

在Widget里并无法直接对于组件进行更新,因为Widget实际画面是在Launcher AppWidgetHostView上呈现,故实际对于Widget组件的操作都在AppWidgetHostView进行,所以需要借由RemoteView,主要目的在把Widget的所有组件进行封装,透过RemoteView告诉Launcher你想要的AppWidget是长什么样子又因为Widget跟Launcher处在不同的process,所以运作过程如下:

1. 透过AppWidgetManger传送要更新AppWidget的识别id以及更新内容(remoteview)。
2. 在AppWidgetManger通知AppWidgetService哪些AppWidgetId需要更新View。
3. 透过aidl IPC机制,将widgetID跟RemoteView传递给AppWidgetHost。
4. AppWidgetHost会根据WidgetId找出放置该Widget的AppWidgetHostView,接着把RemoteView传送过去。
- 本文出自IT能 编程交流论坛,原文地址:http://www.itneng.com/thread-2488-1-1.html
AppWidget framework通过broadcast intents和你的widget沟通,例如当需要更新Widget的时候。透过使用RemoteViews构建和发送。RemoteViews将Widget的layout和特定内容包装后,借由IPC传送到Launcher,最后显示到桌面上。


RemoteViews并不是一个真正的View,而只是一个用于整合Widget里layout呈现与view组件行为的一个Wrapper class(也就是appWidget所要长得样子),透过RemoteView把建立该Widget需要的resource ID和各个组件的事件封装起来。 RemoteViews会通过进程间通信机制传递给AppWidgetHost。


因为activity跟widget的运作机制的不同,应用程序AP里的Avtivity要更新组件时,可以直接取得该组件进行更新。而因为Widget架构是继承appWidgetProvider,所以每个widget就是一个BroadcastReceiver。

在Widget里并无法直接对于组件进行更新,因为Widget实际画面是在Launcher AppWidgetHostView上呈现,故实际对于Widget组件的操作都在AppWidgetHostView进行,所以需要借由RemoteView,主要目的在把Widget的所有组件进行封装,透过RemoteView告诉Launcher你想要的AppWidget是长什么样子又因为Widget跟Launcher处在不同的process,所以运作过程如下:

1. 透过AppWidgetManger传送要更新AppWidget的识别id以及更新内容(remoteview)。
2. 在AppWidgetManger通知AppWidgetService哪些AppWidgetId需要更新View。
3. 透过aidl IPC机制,将widgetID跟RemoteView传递给AppWidgetHost。
4. AppWidgetHost会根据WidgetId找出放置该Widget的AppWidgetHostView,接着把RemoteView传送过去。
- 本文出自IT能 编程交流论坛,原文地址:http://www.itneng.com/thread-2488-1-1.html
AppWidget framework通过broadcast intents和你的widget沟通,例如当需要更新Widget的时候。透过使用RemoteViews构建和发送。RemoteViews将Widget的layout和特定内容包装后,借由IPC传送到Launcher,最后显示到桌面上。


RemoteViews并不是一个真正的View,而只是一个用于整合Widget里layout呈现与view组件行为的一个Wrapper class(也就是appWidget所要长得样子),透过RemoteView把建立该Widget需要的resource ID和各个组件的事件封装起来。 RemoteViews会通过进程间通信机制传递给AppWidgetHost。


因为activity跟widget的运作机制的不同,应用程序AP里的Avtivity要更新组件时,可以直接取得该组件进行更新。而因为Widget架构是继承appWidgetProvider,所以每个widget就是一个BroadcastReceiver。

在Widget里并无法直接对于组件进行更新,因为Widget实际画面是在Launcher AppWidgetHostView上呈现,故实际对于Widget组件的操作都在AppWidgetHostView进行,所以需要借由RemoteView,主要目的在把Widget的所有组件进行封装,透过RemoteView告诉Launcher你想要的AppWidget是长什么样子又因为Widget跟Launcher处在不同的process,所以运作过程如下:

1. 透过AppWidgetManger传送要更新AppWidget的识别id以及更新内容(remoteview)。
2. 在AppWidgetManger通知AppWidgetService哪些AppWidgetId需要更新View。
3. 透过aidl IPC机制,将widgetID跟RemoteView传递给AppWidgetHost。
4. AppWidgetHost会根据WidgetId找出放置该Widget的AppWidgetHostView,接着把RemoteView传送过去。
- 本文出自IT能 编程交流论坛,原文地址:http://www.itneng.com/thread-2488-1-1.html
制的不同,应用程序AP里
- 本文出自IT能 编程交流论坛,原文地址:http://www.itneng.com/thread-2488-1-1.html
AppWidget framework通过broadcast intents和你的widget沟通,例如当需要更新Widget的时候。透过使用RemoteViews构建和发送。RemoteViews将 Widget的layout和特定内容包装后,借由IPC传送到Launcher,最后显示到桌面上。


RemoteViews并不是一个真正的View,而只是一个用于整合Widget里layout呈现与view组件行为的一个Wrapper class(也就是appWidget所要长得样子),透过RemoteView把建立该Widget需要的resource ID和各个组件的事件封装起来。 RemoteViews会通过进程间通信机制传递给AppWidgetHost。


因为activity跟widget的运作机制的不同,应用程序AP里的Avtivity要更新组件时,可以直接取得该组件进行更新。而因为Widget架构是继承appWidgetProvider,所以每个widget就是一个BroadcastReceiver。

在Widget里并无法直接对于组件进行更新,因为Widget实际画面是在Launcher AppWidgetHostView上呈现,故实际对于Widget组件的操作都在AppWidgetHostView进行,所以需要借由 RemoteView,主要目的在把Widget的所有组件进行封装,透过RemoteView告诉Launcher你想要的AppWidget是长什么 样子又因为Widget跟Launcher处在不同的pr
- 本文出自IT能 编程交流论坛,原文地址:http://www.itneng.com/thread-2488-1-1.html
AppWidget framework通过broadcast intents和你的widget沟通,例如当需要更新Widget的时候。透过使用RemoteViews构建和发送。RemoteViews将 Widget的layout和特定内容包装后,借由IPC传送到Launcher,最后显示到桌面上。


RemoteViews并不是一个真正的View,而只是一个用于整合Widget里layout呈现与view组件行为的一个Wrapper class(也就是appWidget所要长得样子),透过RemoteView把建立该Widget需要的resource ID和各个组件的事件封装起来。 RemoteViews会通过进程间通信机制传递给AppWidgetHost。


因为activity跟widget的运作机制的不同,应用程序AP里的Avtivity要更新组件时,可以直接取得该组件进行更新。而因为Widget架构是继承appWidgetProvider,所以每个widget就是一个BroadcastReceiver。

在Widget里并无法直接对于组件进行更新,因为Widget实际画面是在Launcher AppWidgetHostView上呈现,故实际对于Widget组件的操作都在AppWidgetHostView进行,所以需要借由 RemoteView,主要目的在把Widget的所有组件进行封装,透过RemoteView告诉Launcher你想要的AppWidget是长什么 样子又因为Widget跟Launcher处在不同的pr
- 本文出自IT能 编程交流论坛,原文地址:http://www.itneng.com/thread-2488-1-1.html
详细信息请见: 点击打开链接

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值