AppWidgets生命周期:
1. Widget定义
2. Widget实例创建
3. onUpdate() (当设定的时间过去后)
4. 响应在屏幕上的widget窗口点击事件
5. Widget 从home屏幕删除
6. 卸载
AppWidgets在AndroidManifest.xml中的定义如下:
由此可以看出AppWidgets就是一个receiver对象,在intent-filter中定义的action"android.appwidget.action.APPWIDGET_UPDATE"是AppWidgets必须接收的广播Action。而对应的resource属性显示了AppWidgets的配置信息。示例如下:
minWidth,minHeight分别对应AppWidgets在屏幕中的最小宽度和高度,构成了在屏幕中显示的实际大小,如果参数之一大于屏幕的实际的参数,那么添加这个AppWidgets就会弹出提示屏幕空间不够的消息。updatePeriodMillis定义了AppWidgets的更新周期,单位为ms。configure定义了配置Activity的类名称,initialLayout定义了初始的AppWidgets的布局文件。示例如下:
可以看出它的布局文件就是一个普通的布局文件,需要注意的是它的布局元素仅支持以下的几种类型(并且其子类也不被支持):
FrameLayout
LinearLayout
RelativeLayout
AnalogClock
Button
Chronometer
ImageButton
ImageView
ProgressBar
TextView
了解AppWidgets的大概框架后,我们需要介绍其创建过程。首先是配置Activity的实现(它并不是必须的,起到对AppWidgets信息的配置作用)。当用户从菜单中选择对应的AppWidgets时,首先弹出的是它的配置Activity,所以需要配置Activity执行以下操作:
1. 获取widget实例ID。
2. 给用户提示需要输入保存的信息。
3. 保存widget实例以备后面的widget更新时能够获取所设置的信息。
4. 通过制定对应的布局和创建一个对应RemoteViews对象准备首次显示widget视图。
5. 调用RemoteViews对象方法设置对应的值,同时注册按钮点击事件消息等。
6. 通过传递widget实例ID到AppWidgetManager来绘制RemoteViews对象到home屏幕。
7. 返回widget实例ID并关闭。
剩下的就是执行对应的Receiver的过程,请看如下示例:
onEnabled()第一次添加一个widget到桌面的时候会调用这个方法。可以在里面做一些初始化,比如启动一个后台服务。
onUpdate()在更新周期到来的时候会被调用,如果设置了配置Activity,那么在第一次将调用配置Acitivity,然后在更新周期到来的时候将被调用。
onDisabled()桌面最后一个widget被删除的时候将调用此方法。
onDeleted()一般在一个widget被删除的时候调用此方法。
onReceive()如果有广播的话,那么该方法会被调用。