widget及其生命周期
widget的生命周期 |
|
widget步骤: 1、定义一个类实现 AppWidgetProvider class implementation,package cn.zengfansheng.widget;
import android.appwidget.AppWidgetProvider;
public class ExampleAppWidgetProvider extends AppWidgetProvider {
} AppWidgetProvider 其实就是一个BroadCastReceiver
public class AppWidgetProvider extends BroadcastReceiver
2、然后在清单文件中配置,<receiver android:name="ExampleAppWidgetProvider" >
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/example_appwidget_info" />
</receiver> 3、在/Widget/res/xml中创建example_appwidget_info.xml文件 <?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
android:initialLayout="@layout/activity_main"
android:minHeight="40dp"
android:minWidth="40dp"
android:updatePeriodMillis="86400000" >
</appwidget-provider> 4、然后在/res/layout/中创建activity_main.xml的布局文件 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#ff0000" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="我是一个widget小装饰" />
</RelativeLayout> 详细参数详解: <?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
android:configure="com.example.android.ExampleAppWidgetConfigure" //指定一个Activity配置Widget
android:initialKeyguardLayout="@layout/example_keyguard" //锁屏时,出现的布局(如酷狗的上一首,下一首),要手机支持才行
android:initialLayout="@layout/example_appwidget" //widget显示的布局
android:minHeight="40dp" //widget最小高度
android:minWidth="40dp" //widget最小宽度
android:previewImage="@drawable/preview" //widget的预览图片,不写默认用应用程序图标
android:resizeMode="horizontal|vertical" //widget是否支持缩放,要android4.0以上才支持
android:updatePeriodMillis="86400000" //widget更新的周期,最小为半小时,低于这个值都无效,1800000
android:widgetCategory="home_screen|keyguard" > //widget显示在home_screen,显示在keyguard(锁屏时),低版本不支持
</appwidget-provider> 4、低版本长按桌面,高版本有个widgets选项卡,里面有该widget |
widget生命周期 package cn.zengfansheng.widget;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.Context;
import android.content.Intent;
public class ExampleAppWidgetProvider extends AppWidgetProvider { @Override
public void onReceive(Context context, Intent intent) {
super.onReceive(context, intent);
System.out.println("onReceive");
} @Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {
super.onUpdate(context, appWidgetManager, appWidgetIds);
System.out.println("onUpdate");
} @Override
public void onDeleted(Context context, int[] appWidgetIds) {
super.onDeleted(context, appWidgetIds);
System.out.println("onDeleted");
} @Override
public void onEnabled(Context context) {
super.onEnabled(context);
System.out.println("onEnabled");
} @Override
public void onDisabled(Context context) {
super.onDisabled(context);
System.out.println("onDisabled");
}
} |
widget生命周期结果和总结: 第一次创建widget
11-19 03:21:07.909: I/System.out(2251): onEnabled
11-19 03:21:07.909: I/System.out(2251): onReceive
11-19 03:21:07.909: I/System.out(2251): onUpdate
11-19 03:21:07.909: I/System.out(2251): onReceive
第二次创建widget
11-19 03:23:04.401: I/System.out(2251): onUpdate
11-19 03:23:04.401: I/System.out(2251): onReceive
第三次创建widget
11-19 03:23:32.361: I/System.out(2251): onUpdate
11-19 03:23:32.361: I/System.out(2251): onReceive
移除一个widget
11-19 03:24:07.662: I/System.out(2251): onDeleted
11-19 03:24:07.662: I/System.out(2251): onReceive
移除第二个widget
11-19 03:24:33.772: I/System.out(2251): onDeleted
11-19 03:24:33.772: I/System.out(2251): onReceive
移除最后一个widget
11-19 03:25:16.593: I/System.out(2251): onDeleted
11-19 03:25:16.593: I/System.out(2251): onReceive
11-19 03:25:16.593: I/System.out(2251): onDisabled
11-19 03:25:16.593: I/System.out(2251): onReceive 总结:
1、widget其实就是一个广播接收者,所有在任何情况下,创建/移除一个widget,因为是一个广播事件,都会执行onReceive()
2、当第一个widget被创建了,执行onEnabled()作用:初始化操作,数据库初始化,后台服务的初始化。
3、当最后一个widget被移除时,执行onDisabled()
作用:扫尾操作,擦屁股,删除临时文件,停止后台服务。
4、只要有新的widget被创建,就会执行onUpdate()方法
作用:更新界面 注意:
widget是显示在另外一个应用程序里面的,通常是桌面应用。 常见的市面上的桌面应用:
awt桌面,go桌面,360桌面,点心桌面,腾讯桌面,miui桌面
不同的桌面,实现的方式不一样,上面的4个方法调用的顺序也不一致,但方法的作用是一样的。
|
结果: |