田海立@CSDN
2012-8-17
本文简要描述AppWidget系统框架,并对AppWidget系统里的AppWidgetHost(IAppWidgetHost) / AppWidgetProvider / AppWidgetService(IAppWidgetService) / AppWidgetManager等组件做简要的阐述。
Android中的AppWidget也就是“窗口小部件”,实现了桌面(Launcher)上显示控件的机制,并能响应用户的点击操作。而实际上,提供显示的UI元素和对点击事件的响应是由Remote端的AppWidgetProvider实现;具体显示是Local的AppWidgetHost通过AppWidgetHostView实现。AppWidgetHost、AppWidgetProvider与AppWidgetService和AppWidgetManager按照特有的机制组合在一起,才能完整的实现AppWidget机制。本文简要描述AppWidget系统框架,并对这里的组成元素做简要的阐述。后续的文章会结合关键典型场景,对其中的具体角色着重描述。
一、AppWidget系统框架
下图描述了AppWidget系统框架图。
图一、AppWidget系统框架图
AppWidget实现Remote端提供UI元素;Local端具体显示。AppWidgetHost在AppWidget系统中是Local端;AppWidgetProvider端是Remote端。AppWidgetHost和AppWidgetProvider直接或通过IAppWidgetService或间接的通过AppWidgetManager,与AppWidgetService实现交互。AppWidgetService是所有元素的总管,负责协调其他各个部分。
二、AppWidget中各个角色职能的简要分析
2.1 AppWidgetHost
图二、AppWidgetHost
AppWidgetHost通过IAppWidgetService利用Binder机制实现与系统进程中的AppWidgetService通信;
AppWidgetHost有IAppWidgetHost(通过Callbacks)的实现,并在AppWidgetHost.startListening()中注册到AppWidgetService中,实现当Remote端的数据有更新时,通过IAppWidgetHost.updateAppWidget()通知AppWidgetHost更新本地的显示;或者当Remote端的Provider改变时通知AppWidgetHost。
AppWidgetHost创建本地AppWidgetHostView时,会以AppWidgetId和AppWidgetHostView加入mViews: HashMap<Interger,AppWidgetHostView>
AppWidgetHost的典型应用是Launcher,可在《Android中AppWidget的分析与应用:AppWidgetHost》中看AppWidgetHost的实现。
2.2 AppWidgetProvider
图三、AppWidgetProvider
AppWidgetProvider是AppWidget的Remote端内容提供方,并能注册响应其所提供内容的某个View被点击时,响应的Intent。
AppWidgetProvider是一个抽象类,实现类需要实现抽象方法onUpdate() / onDeleted()/ onEnabled()和onDisabled()。这是AppWidgetProvider的一个模板模式实现,要求AppWidgetProvider的实现者:
- 在AndroidManefest.xml中声明这个AppWidgetProvider是"android.appwidget.action.APPWIDGET_UPDATE"的Receiver,这样AppWidgetProvider作为一个BroardcastReceiver才能接收到AppWidgetService发出的消息。而AppWidgetService查询系统中已经安装了哪些AppWidgetProvider也是通过查询这个接收者的Intent来的实现。所以如果没有这个Receiver,安装的Provider里就没有这个Provider,亦即,未加入到AppWidget系统中。
- 另外,这个Receiver的meta-data的name指定为“android.appwidget.provider”;resource中用xml定义appwidget-provider内的各种属性。这些属性按包被安装时,检索出来赋给AppWidgetProviderInfo。
通常,对于应用开发来说不太注重AppWidget其他的部分,只是写AppWidgetProvider,但一般也都称AppWidgetProvider为AppWidget开发。
AppWidgetProvider的典型应用是Settings里的电量控制,可在《Android中AppWidget的分析与应用:AppWidgetProvider》中看AppWidgetProvider的实现。
2.3 AppWidgetService
图四、AppWidgetService
AppWidgetService通过IAppWidgetService提供方法给AppWidgetHost、AppWidgetProvider使用。
在mInstalledProviders:AppWidgetService.Provider中保存AppWidgetProvider的信息;在mHost:AppWidgetService.Host中保存AppWidgetHost的信息;并用mAppWidgetIds:AppWidgetService.AppWidgetId保存AppWidgetHost与AppWidgetProvider的绑定关系。
三、AppWidget各个角色的部署
AppWidgetService运行于三个各自不同的进程空间:
- AppWidgetService运行于system_process进程;
- AppWidgetHost运行于自己的进程空间,典型的桌面上的AppWidgetHost运行于Launcher中;
- AppWidgetProvider也是运行于自己的进程空间,典型的如“电量控制”这个AppWidgetProvider运行于Settings中。
AppWidgetHost和AppWidgetProvider要用到AppWidgetService的服务时,用Binder机制通过IAppWidgetService实现。AppWidgetService通过IAppWidgetHost通知AppWidgetHost;AppWidgetService通过发Broadcast通知AppWidgetProvider。
四、相关文章
后面会用一系列的文章,来具体阐述AppWidget中各个部分的细节:
Android AppWidget框架
简要描述AppWidget系统框架,并对这里的组成元素做简要的阐述。
Android中选取并绑定AppWidget
描述由Launcher作为AppWidgetHost发起,Settings中AppWidgetPickActivity实现的选取并绑定AppWidgetProvider的过程。
Android中AppWidget的分析与应用:AppWidgetProvider
以SettingsAppWidgetProvider为例,通过对AppWidgetProvider内部实现机制的描述,使读者深刻理解开发AppWidgetProvider所要注意的地方。
Android中AppWidget的分析与应用:AppWidgetHost
以Launcher为例,通过它作为AppWidgetHost角色所参与AppWidget实现过程的描述,使读者理解AppWidgetHost如何实现。
Android中RemoteViews的实现
本文结合AppWidget的应用场景,分析Android中RemoteViews的内部具体实现。
分享到:
相关推荐
总结,`android AppWidget ListView`的使用涉及到AppWidget框架、RemoteViews、ListView与Adapter的结合以及事件处理等多个核心概念。通过源码学习,可以深入理解这些组件的协同工作方式,提升Android开发技能。
通过对源码的实践学习,不仅可以掌握AppWidget的开发,还能提高对Android系统框架的理解。如果你在学习过程中发现任何侵权问题,可以按照描述中的提示联系作者进行处理。总的来说,这是一个有价值的资源,有助于提升...
- AppWidget是Android框架的一部分,可以通过`AppWidgetProvider`类来实现。这个类是一个BroadcastReceiver的子类,负责处理来自系统(如添加、删除或更新小部件)的广播事件。 2. **AppWidgetProviderInfo**: -...
AppWidget是Android框架的一部分,允许开发者创建可以在主屏幕或其他支持小部件的视图上显示的UI元素。这些小部件通常包括按钮、文本、图片等,通过BroadcastReceiver与应用程序进行通信。 1. **AppWidgetProvider*...
首先继续了解下App Widget框架的主要的类: AppWidgetProvider:继承自BroadcastReceiver,在App Widget应用update,enable,disable和deleted时接受通知。其中onUpdate,onReceive是最常用到的方法。 ...
Android的小部件(Widget)属于App Widget框架,它是Android系统提供的一种轻量级组件,用户可以将它们添加到主屏幕上,以展示各种信息或执行简单的操作。常见的Widget类型包括时钟、天气预报、音乐播放控制等。 在...
《Android框架与应用开发介绍》是中国电信的一份培训文档,主要针对Android初学者,系统地讲解了Android基础知识,包括Android的发展、框架结构以及如何进行应用和Widget的开发。以下是其中的关键知识点: 1. **...
而07_appwidget01可能是关于Android小部件(AppWidget)的代码或配置文件,AppWidget是用户可以在主屏幕上直接互动的小型应用,它们可以显示实时信息,如天气、时钟等,无需打开完整的应用。 Android应用的打包过程...
在Android平台上,桌面小组件(AppWidget)是应用程序与用户交互的一种便捷方式,即使用户并未直接打开应用,也能在主屏幕上展示相关信息或提供快速操作。本教程将通过一个最简单的实例,详细介绍如何创建一个...
首先,我们需要了解Android的App Widget框架。App Widget是Android系统中的一部分,它允许开发者创建可以在主屏幕上显示的小部件,这些小部件可以直接与应用程序进行交互。在这个源码中,我们将会看到如何定义一个...
Android 1.5 SDK引入了AppWidget框架,自此,开发者可以利用这个框架设计各种各样的Widget。 一个Widget本质上是一个BroadcastReceiver,通过XML元数据来描述其外观和行为。元数据通常包含Widget的尺寸、初始布局...
AppWidget框架是Android提供的一个开发平台,用于创建和管理Widget。该框架包括了一系列的API和工具,帮助开发者轻松构建可交互的Widget。通过这个框架,开发者可以实现自定义Widget的布局、数据更新逻辑以及用户...
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> android:name="android.appwidget.provider" android:resource="@xml/widget_info" /> ``` 其中,`<meta-data>` 标签指向一个 XML...
- 可能使用了支持库如`androidx.drawerlayout.widget.DrawerLayout`和`com.google.android.material.navigation.NavigationView`,这些库提供了更现代和易于使用的组件。 7. **实际运行和调试**: - 通过Android ...
首先,我们来看AppWidget框架的核心类: 1. **AppWidgetProvider**:这是一个继承自BroadcastReceiver的类,它在AppWidget需要更新、启用、禁用或删除时接收广播通知。开发者主要在`onUpdate`和`onReceive`方法中...
一个通用的Android端弹窗管理框架,内部维护弹窗优先级队列 具备弹窗管理扩展功能 整合Dialog,PoupoWindow,悬浮Widget,透明Webview,Toast,SnackBar,无需再为繁琐的业务弹窗逻辑所困扰如何添加依赖只需要两行代码轻松...
在Android系统中,Widget是App Widget Provider组件的一部分,它是由XML布局文件和Java代码共同构建的。XML文件定义了Widget的外观和大小,而Java代码处理用户交互事件。在创建一个Widget时,你需要在...
Android应用程序框架是Android系统的核心组成部分,它为开发者提供了一个结构化的开发环境,使得开发者能够创建高效、可扩展的应用程序。框架定义了一系列接口和类,这些接口和类是开发者与Android系统的各个层次...