以下是转eoe论坛keke的文章。

--------------------------------------

android在1.5版本新增加了时下流行的widget功能。坛子里也有不少童鞋对这个很感兴趣,也在开发相关
widget. 那么今天就来讲讲android这套widget framework是如何工作的,应应景哈~~~~

AppWidgetService.java 这是widget framework的核心类,是系统service之一,它承担着所有widget
管理工作。Widget安装,删除,更新等等都需要经过AppWidgetService.它是开机就启动的.

在开机过程中,java层进程System Server启动后(这个进程管理着所有的系统service, 例如
activity manager service, windows manager service, power manager service等),会创建
AppWdigetService的实例,并调用它的SystemReady()方法,在这个方法里,它做了三件事:
1)遍历所有的安装包,找到符合条件ACTION=ACTION_APPWIDGET_UPDATE和<meta-data android:name="android.appwidget.provider"/>的intent receiver,解析相关信息,保存到本地数据成员中。
2)读取本地文件数据:/data/system/appwidgets.xml,所有已安装到桌面的widget的信息都保存在这个文件里。读出来,也保存到本地数据成员里。
3)注册了三个消息:ACTION_BOOT_COMPLETED(系统启动到桌面就会发送此消息),ACTION_PACKAGE_ADDED(有新APK包安装到系统),ACTION_PACKAGE_REMOVED(有APK包被删除)。当系统启动到桌面后,AppWidgetService接收到了ACTION_BOOT_COMPLETED消息,它会去检查本地数据成员,如果有已经安装到桌面的widget,它会上发ACTION_APPWIDGET_ENABLED和ACTION_APPWIDGET_UPDATE消息。如果有widget设置了updatePeriodMillis的属性,它就会开始计时(这个是通过AlarmManager来实现的),到时间时,就会再次上发ACTION_APPWIDGET_UPDATE消息。

-----------------------------分割线

分析到Framework源码级别了,记录一下。

更多相关文章

  1. SpringBoot 2.0 中 HikariCP 数据库连接池原理解析
  2. 一句话锁定MySQL数据占用元凶
  3. android 报错column '_id' does not exist的解决方案
  4. 【Android】Handler应用(二):从服务器端加载JSON数据的优化
  5. android:查询数据库 指定列 指定列名 并输出查询结果(如查询电话
  6. 安卓通过recyclerview进行全表增删改查
  7. Android应用程序键盘(Keyboard)消息处理机制分析(7)
  8. Activity 与 Fragment 通信方式总结
  9. Android——数据存储(四种方式之二)读写SD卡

随机推荐

  1. Android OpenGL 3D游戏开发入门必看文章
  2. Android OnSensorChanged() not working
  3. Android和PC端通过局域网文件同步
  4. Android——Notifications笔记
  5. Android fragment在xml中使用没添加ID
  6. android ListView 的使用
  7. Android 给View加圆角
  8. Android :java.lang.RuntimeException: t
  9. Android的系统通知栏小例子
  10. Android剪贴板操作