1. 用户长按Launcher弹出添快捷组件的Dialog,选择添加AppWidget,这时会打开一个Activity(AppWidgetPickActivity)显示系统中全部

AppWidget,单击某一个AppWidget后会做以下操作:

(1) 通过AppWidgetService获取一个最新的appWidgetId值。

(2) 根据获取的appWidgetId值,向单击的AppWidget组件发出APPWIDGET_ENABLED和APPWIDGET_UPDATE更新广播。并向

/data/system/appwidgets.xml中添加此AppWidget的基本信息。

2. 启动AppWidgetPickActivity(第1步中提到)时使用的是startActivityForResult()方法,所以在向所单击的AppWidget组件发出

APPWIDGET_ENABLED和APPWIDGET_UPDATE更新广播后会执行onActivityResult()方法,做以下准备工作:

(1) 将需要被添加到Launcher的AppWidget基本信息保存到数据库中。

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

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

为空)。

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

(5) 将LauncherAppWidgetHostView布局对象添加到Launcher的WorkSpace中(因为RemoteViews对象为空,所以只在Launcher的

WorkSpace中占了一个位置)。

3. 在第1步中已经向需要添加到Launcher中的AppWidget发出了更新消息(注意:第一步和第二步是异步执行的),继续做以下事情:

(1) 每个AppWidget接收到广播后都会调用onEnabled()方法和onUpdate()方法,在onEnabled()方法中进行一些初始化操作,在

onUpdate()方法中创建RemoteViews布局对象并通过AppWidgetManager的updateAppWidget(int appWidgetId, RemoteViews

remoteViews)方法通知AppWidgetService对象用RemoteViews对象更新appWidgetId所对应的AppWidget.

(2) AppWidgetService接收到了appWidgetId和RemoteViews后,通过appWidgetId查找已经被添加到Launcher的

LauncherAppWidgetHostView布局对象,并将RemoteViews中的布局更新到LauncherAppWidgetHostView布局对象中。

AppWidget显示在Launcher中。

更多相关文章

  1. Android(安卓)x86模拟器Intel Atom x86 System Image配置与使用
  2. Android(安卓)流式布局
  3. Android(安卓)Intent传递对象的两种方法(Serializable,Parcelabl
  4. android+面试题
  5. Android(安卓)Java 线程池 ThreadPoolExecutor源码篇
  6. 【Android系统视窗模块】Android(安卓)8与Android(安卓)9分屏模
  7. Android进阶之大话设计模式
  8. android与H5交互方法简介
  9. Android(安卓)registerContentObserver 接口监视数据库变化

随机推荐

  1. “快的打车”创始人陈伟星的新项目招人啦
  2. Android Excel 解析 xls 和 xlsx,方法也可
  3. Android P (4)一种绕过Android P上非SDK
  4. 一起写一个Android图片轮播控件
  5. 据报道,微软正考虑支持Windows手机或Andro
  6. Android原生股票图-分时图讲解和绘制(一)
  7. 我的Android重构之旅:插件化篇
  8. Android图像处理——ColorMatrix
  9. XML解析(一),SAX解析XML
  10. Android群英传--绘图机制与处理技巧(三)