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
詳細信息請見:點擊打開鏈接

發佈了49 篇原創文章 · 獲贊 206 · 訪問量 16萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章