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中。
分享到:
相关推荐
【App Widget加载流程】 1. **添加Widget**: 用户从应用程序抽屉选择Widget,并将其拖放到主屏幕上。此时,Android系统调用App Widget Provider的`onAddWidget()`方法。 2. **初始化布局**: 在`onAddWidget()`方法...
Android 手机 APP 编程开发的流程包括以下几个步骤: 1. 安装和配置 Android 开发环境,包括安装 Android Studio、设置 JDK 和 SDK 等。 2. 创建一个新的 Android 项目,包括选择项目模板、设置项目结构等。 3. ...
- `android:initialLayout="@layout/example_appwidget"`:指定了 Widget 加载时使用的布局文件。 - `android:minHeight="60dp"` 和 `android:minWidth="180dp"`:定义了 Widget 的最小尺寸。 - `android:...
在Android开发中,AppWidget与Android.Widget扮演着不同但至关重要的角色。AppWidget是Android平台上的桌面小部件,允许用户在主屏幕上放置动态内容,如天气预报、新闻摘要或应用程序快捷方式。AppWidget的设计初衷...
在`AndroidManifest.xml`中,你需要添加一个`<receiver>`标签来注册你的WidgetProvider,同时在`<intent-filter>`中声明`ACTION_APPWIDGET_UPDATE`动作,并使用`meta-data`标签指向`widget_demo_appwidget_info.xml...
1. 启动优化:分析陌陌APP启动流程,可以学习如何减少启动时间,如使用SplashScreen、预加载资源等方法。 2. 内存优化:查看源码中如何处理内存泄漏和过度绘制问题,学习使用工具如Memory Profiler进行内存分析。 ...
在Android应用开发中,创建一个具有可滑动选项卡的用户界面是常见的需求,比如百度外卖和美团登录页面。TabLayout是Google推出的Android Design Support Library的一部分,它提供了一种优雅的方式来实现这种效果。本...
import android.appwidget.AppWidgetProvider; import android.content.Context; import android.content.Intent; public class Example extends AppWidgetProvider { @Override public void onDeleted(Context ...
在本文中,我们将深入探讨如何在Android应用中实现视频播放,特别是在涉及到AppWidget(桌面小部件)时可能遇到的问题以及解决方案。 首先,我们要关注的核心组件是`VideoView`。`VideoView`是Android SDK提供的一...
AppWidgetProvider需要在AndroidManifest.xml中注册,并监听ACTION_APPWIDGET_UPDATE、ACTION_APPWIDGET_DELETED等广播事件。 3. **布局文件**: 源码中会包含一个或多个XML文件,这些文件定义了Widget的UI结构,如...
8. **通知与Widget**:高级的天气应用可能会提供桌面小部件和通知功能,这涉及到Android的App Widget API和Notification Manager的使用。 9. **权限管理**:Android 6.0及以上版本引入了运行时权限管理,源码中需要...
在本案例中,我们将探讨一个基础的Android应用程序开发流程。为了更好地理解这些概念,让我们一起看看涉及到的关键文件。 ##### 1. `res/layout/main.xml` — 应用主界面布局文件 该文件定义了应用的用户界面布局...
【Android项目源码-安卓Launcher原生桌面源码】是一个深入了解Android系统启动器(Launcher)工作原理的重要资源。源码提供了Android操作系统中的主屏幕和应用抽屉的实现细节,这对于Android开发者尤其是系统定制者...
在Android开发中,使用摄像头拍照是一项常见的功能,通常有两主要方法:调用系统相机(System Camera)和自定义相机界面。本篇笔记将重点讨论如何调用系统相机进行拍照。 首先,为了能够访问和保存拍摄的照片,我们...
在Android系统中,它们是App Widget;而在Web开发中,如React或Angular,Widget可能指的是自定义的UI组件。 【压缩包子文件的文件名称列表】:仅有一个名为“widget”的文件,这可能是一个包含关于“widget_WIDGET_...
在Android应用开发中,底部导航栏(Bottom Navigation)是一种常见的用户界面设计,它允许用户在多个顶级操作之间轻松切换。本教程将详细讲解如何在Android项目中实现底部切换标签,以及如何利用Fragment来管理不同...
- **Widget组件**:Android中的Widget包括AppWidget、Chronometer、DigitalClock等,它们是Android桌面扩展的一种形式。 - **AppWidgetProvider**:这是Widget的主要组件,继承自BroadcastReceiver,负责监听并...
"widgetdemo"项目就是一个典型的Android小部件实现示例,它展示了如何创建、配置以及更新Android小部件的基本流程。 一、Android小部件基础 1. 小部件定义:Android小部件是通过继承`AppWidgetProvider`类来创建的...
#### 六、Home Screen的对象加载流程 - **DesktopItemsLoader**负责从内容提供商中加载Home Screen上的所有对象信息。 - **PrivateApplicationsLoader mApplicationsLoader**用于从包管理器(Package Manager)获取...