Android系统启动时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中。

更多相关文章

  1. Android(安卓)NavigationView 中 menu item 字体大小设置
  2. Android中滑屏初探 ---- scrollTo 以及 scrollBy方法使用说明
  3. android中listview的setAdapter()和getAdapter()
  4. 【Android】从无到有:手把手一步步教你使用最简单的 Fragment(一)
  5. 学习Android从0开始之基础篇(1)-Android的四大基本组件
  6. Android中WebView获取网页中标题 ,内容, 图片的方法
  7. 浅谈Java中Collections.sort对List排序的两种方法
  8. 类和 Json对象
  9. Python list sort方法的具体使用

随机推荐

  1. [闲话杂谈] Android(安卓)跟 Linux 是有
  2. 转载:谁说程序员不浪漫---Android爱心表白
  3. Android平板电脑远程控制PC机教程
  4. Android音频编辑之音频合成功能
  5. 浅谈android的mount命令
  6. [置顶] 搜集整理的一些博客导航
  7. Android(安卓)- 小功能 - Android中dp和p
  8. Android工程引用另外一个工程的正确/错误
  9. Android真机测试,Find Explorer无法打开da
  10. Android混合开发(一)——移动端与前端交互