Widget原理

    在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
详细信息请见: 点击打开链接

你可能感兴趣的:(android,widget)