`
guojianhui0906
  • 浏览: 47965 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

AppWidget加载流程(一)

阅读更多
1.  Android系统启动,SystemServer创建AppWidgetService,并调用systemReady()方法,在systemReady()方法中做以下三项准备工作:

    (1)通过PackageManager从Android系统中查找所有已经被安装的AppWidget(包含"android.appwidget.action.APPWIDGET_UPDATE“ 的Action和meta-data标签),解析AppWidget的配置信息,封闭成对象,保存到List集合。

    (2)从/data/system/appwidgets.xml文件读取已经被添加到Launcher的AppWidget信息,封闭成对象,保存到List集合中。

    (3)注册四个广播接收器:第一. Android系统启动完成,第二. Android配置信息改变,第三. 添加删除应用,第四. sdcard的安装与缷载。

2.  Android系统启动Launcher应用程序,会做以下准备工作:

    (1)从Launcher应用的数据库查找已经被添加到Launcher的AppWidget信息。

    (2)根据查找到的appWidgetId值(整型值)创建LauncherAppWidgetHostView布局对象。

    (3)根据查找到的appWidgetId值(整型值)从AppWidgetService中获取RemoteViews对象(因为是第一次启动所以RemoteViews对象为空)。

    (4)将获取到的RemoteViews对象的布局解析并设置到第(2)步中创建的LauncherAppWidgetHostView布局对象中。

    (5)将LauncherAppWidgetHostView布局对象添加到Launcher的WorkSpace中(因为RemoteViews对象为空,所以只在Launcher的 WorkSpace中占了一个位置)。

3.  Android系统启动完成,发出BOOT_COMPLETED广播,AppWidgetService接收到广播后,会做以下事情:

    (1)获取已经添加到Launcher的AppWidget列表(在第1步的第(2)小步中提到),依次向这个Widget发出APPWIDGET_ENABLED和  APPWIDGET_UPDATE更新广播,根据配置的更新间隔定时发出更新广播。

    (2)每个AppWidget接收到广播后都会调用onEnabled()方法和onUpdate()方法,在onEnabled()方法中进行一些初始化操作,在onUpdate()方法中创建RemoteViews布局对象并通过AppWidgetManager的updateAppWidget(int appWidgetId, RemoteViews remoteViews)方法通知AppWidgetService对象用RemoteViews对象更新appWidgetId所对应的AppWidget.

    (3)AppWidgetService接收到了appWidgetId和RemoteViews后,通过appWidgetId查找已经被添加到Launcher的LauncherAppWidgetHostView布局对象,并RemoteViews中的布局更新到LauncherAppWidgetHostView布局对象中。AppWidget显示在Launcher中。
分享到:
评论

相关推荐

    基于Android平台的App Widget设计与实现.pdf

    【App Widget加载流程】 1. **添加Widget**: 用户从应用程序抽屉选择Widget,并将其拖放到主屏幕上。此时,Android系统调用App Widget Provider的`onAddWidget()`方法。 2. **初始化布局**: 在`onAddWidget()`方法...

    Widget开发Demo

    - `android:initialLayout="@layout/example_appwidget"`:指定了 Widget 加载时使用的布局文件。 - `android:minHeight="60dp"` 和 `android:minWidth="180dp"`:定义了 Widget 的最小尺寸。 - `android:...

    Android知识总结.doc

    `RemoteViews`通过从布局资源文件加载布局,为AppWidget提供了灵活性和可扩展性。 **支持的布局和组件:** 目前,`RemoteViews`支持的布局类型包括`FrameLayout`、`LinearLayout`和`RelativeLayout`。同时,它也...

    android视频播放

    如果想要在AppWidget中实现视频播放,通常需要借助通知栏或者启动一个服务来承载`VideoView`,并通过远程视图(RemoteViews)更新AppWidget的状态。 然而,这需要巧妙的设计和处理,例如通过发送广播或意图(Intent...

    widget_WIDGET_

    【标题】:“widget_WIDGET_”通常在IT领域中表示一种特定的组件或工具,这里的“WIDGET”可能是一个软件开发中的术语,代表了一个用户界面(UI)元素或者一个功能模块。这种命名方式常见于编程中,用以区分不同的...

    Widget相关

    import android.appwidget.AppWidgetProvider; import android.content.Context; import android.content.Intent; public class Example extends AppWidgetProvider { @Override public void onDeleted(Context ...

    简单掌握Android Widget桌面小部件的创建步骤

    在`AndroidManifest.xml`中,你需要添加一个`<receiver>`标签来注册你的WidgetProvider,同时在`<intent-filter>`中声明`ACTION_APPWIDGET_UPDATE`动作,并使用`meta-data`标签指向`widget_demo_appwidget_info.xml...

    widgetdemo

    3. `appwidget-provider.xml`配置:在`res/xml`目录下,创建`appwidget-provider.xml`文件,用于定义小部件的元数据,如最小宽度、高度、更新频率等。 二、小部件生命周期 1. 小部件安装:当用户在主屏幕上添加小...

    ios-Widget开发.zip

    开发者需要确保Widget加载速度快,内存占用低,以提供流畅的用户体验。 10. **隐私与权限**: 和其他iOS应用一样,Widget也需要遵循隐私政策,例如请求必要的用户权限,如访问网络或本地数据。 这个压缩包中的...

    widget.rar

    本文将深入探讨一个名为“widget”的生鲜水果电商App源码,它是基于Apicloud平台构建的,具备登录、注册、商品浏览、点击互动以及购买等功能,充分体现了移动电商应用的全面性和实用性。 首先,我们来了解Apicloud...

    ios-ios widget的使用(OC版).zip

    通过研究和学习这个项目,你将更深入地理解Widget的开发流程。 总的来说,iOS Widget为开发者提供了新的交互方式,让用户能在不离开当前屏幕的情况下获取和操作信息。虽然这个特性自iOS 8以来就已经存在,但它仍然...

    Python开发移动APP之Kivy(一)-第一个APP资源包

    **Python开发移动APP之Kivy(一)- 第一个APP资源包** Kivy是一个开源的Python库,专门用于创建跨平台的多触控用户界面,适用于桌面和移动设备。Kivy以其简洁的语法和高性能而受到开发者欢迎,使得Python开发者也能...

    Android应用源码之 电量显示Widgets插件实现.zip

    AppWidgetProvider需要在AndroidManifest.xml中注册,并监听ACTION_APPWIDGET_UPDATE、ACTION_APPWIDGET_DELETED等广播事件。 3. **布局文件**: 源码中会包含一个或多个XML文件,这些文件定义了Widget的UI结构,如...

    Laravel开发-widget

    通过查看这些文件,你可以更深入地了解Laravel中Widget的开发流程。 总的来说,Laravel的Widget是一种强大的工具,它允许开发者创建可复用的视图组件,提高代码的可维护性和效率,同时保持界面设计的一致性。在实际...

    一款婚恋交友app纯flutter写

    本篇文章将深入探讨如何使用Flutter构建一款婚恋交友App,帮助开发者了解在JavaScript开发背景下,转向Flutter进行移动应用开发的流程和关键点。 一、Flutter基础与特性 Flutter以其Dart语言为开发基础,Dart是...

    基于Flutter构建的新闻App

    总的来说,基于Flutter构建的新闻App结合了Widget系统、状态管理、数据持久化、网络请求、导航和用户界面设计等多个关键知识点,展现了Flutter的强大功能和高效开发流程。随着 Flutter 社区的不断发展,更多的库和...

    一个简陋的flutter影视APP半成品

    "一个简陋的flutter影视APP半成品" 这个标题表明这是一个使用Flutter框架开发的、专门用于观看影视内容的应用程序项目,但目前的状态是未完成的,可能缺少某些功能或者存在用户体验上的不足。这为开发者提供了一个...

    Launcher 2源码修改学习总结

    - 小部件的添加和删除也是通过BroadcastReceiver监听APPWIDGET_ACTION_APPWIDGET_DELETED和APPWIDGET_ACTION_APPWIDGET_ADDED广播来实现的。 6. **动画与效果** - Android的Transition动画库在Launcher 2中用于...

    Android_桌面开发系列(一).doc

    #### 六、Home Screen的对象加载流程 - **DesktopItemsLoader**负责从内容提供商中加载Home Screen上的所有对象信息。 - **PrivateApplicationsLoader mApplicationsLoader**用于从包管理器(Package Manager)获取...

Global site tag (gtag.js) - Google Analytics