1. 程式人生 > >桌面小部件AppWidgetProvider簡單分析

桌面小部件AppWidgetProvider簡單分析

1、一般桌面小部件涉及到的類

  1. AppWidgetProvider :BroadcastRecevier子類,用於接收更新,刪除通知
  2. AppWidgetProvderInfo:AppWidget相關資訊(大小,更新頻率等),xml形式
  3. AppWidgetManger:AppWidget管理類,用於向provider傳送訊息
  4. RemoteViews:可以在其他程序中執行的類,用於向provider傳送通知。
  5. RemoteViewsService : 是一個遠端的服務介面卡 可以請求RemoteViews,管理RemoteViews的服務.
  6. RemoteViewsFactory : 提供了RemoteViewsFactory用於填充遠端集合檢視。

2、RemoteViewsService分析:

  1. RemoteViewsService是一個抽象類,繼承了Service,底層中有IRemoteViewsFactory.aidl,且發現該Service中的IBinder是通過AIDL實現的,類中定義了介面RemoteViewsFactory,介面中的方法通過AIDL與其程序進行通訊,即跨程序通訊。當有多個RemoteViewsFactory時,儲存在HashMap sRemoteViewFactories中便於統一管理
  2. 故當我們的widget中包含ListView,Gridview等集合檢視的時候.我們就需要藉助一個類RemoteViewsService,繼承RemoteViewsService實現介面並複寫onGetViewFactory 返回RemoteViewsFactory

3、RemoteViews分析:

  1. RemoteViews並沒有繼承系統View,只是實現了Parcelable(Android特有的方式)和Filter介面。故RemoteViews實現了序列化。
  2. 底層中RemoteViews.aidl,故也是通過AIDL與其他程序通訊的,即跨程序通訊

4、AppWidgetProvider分析:

  1. AppWidgetProvider繼承了BroadcastRecevier,生命週期也比較簡單,可以參考demo:https://github.com/lelelongwang/TestApp 中的MyAppWidget中的log

5、AppWidgetManager分析:

  1. 是個AppWidget工具類,單例的方式實現。可以通過getInstance()獲取例項。