开启一个服务定时更新widget组件

本文将指导您如何创建一个类来继承AppWidgetProvider,并在其中实现onEnabled()和onDisabled()方法。通过使用Service服务定时更新Widget内容,实现后台自动化操作。包括初始化操作、创建Service、使用Timer和TimerTask来定时更新Widget,以及在服务启动和停止时的正确处理。

开启一个服务定时更新widget组件

1.创建一个类继承AppWidgetProvider类实现里面的onEnabled()跟onDisabled()方法

2.在onEnabled()方法中进行初始化操作,用意图开启一个后台的服务,让服务更新widget里面的内容

3.创建一个继承Service服务,这个服务是用来更新widget的内容的,复写里的onCreate()跟onDestroy()方法

4.在onCreate()方法时定时的去更新widget里面的内容,用定时器

Time创建一个定时器

TimerTask创建一个定时任务,在任务中的run()方法中去更新widget

5.在run()方法中更新widget

1>获取widget管理器的实例

AppWidgetManger awm = AppWidgetManager.getInstance(getApplicationContext());//在service中用getApplicationContext()方法去获取上下文

2.>widget管理器有如下方法

getAppWidgetIds(ComponentName provider)//可以获取widget的id

getAppWidgetInfo()可以获取widget的信息

updateAppWidget(provider,views);

provider:定义要更新的widget的组件(广播接收者)

ComponentName provider = new ComponentName(pkg,cls);第一参数是组件所在包名,getPackageName()得到,第二参数是widger的class名称(cn.itcast.mobilesafe.receiver,MyWidget)

views:RemoteViews的对象,是远程的view对象,widget的显示其实是一个进程间通信的操作,在手机卫士的进程里面把view对象准备出来,传递给桌面的应用

 RemoteViews views = new remoteViews(packageName,layoutId);

packageName:view对象本身所在的包名getPackageName(),即桌面程序

layoutId:widget的布局在我们的手机卫士里定义的widget布局,然后就创建出来一个可以在进程间进行通讯的view对象了

3>拿到RemoteViews对象以后就可以更改里面的内容了

views.setBitmap()设置一个位图

views.setTextViewText(viewId,text);//更新某一个textView里面的文本

views.setTextViewText(R.id.process_count,"正在运行进程数"+count);这里的R.id.process_count是在widget布局里定义的textView组件的id

 

6.run()方法完成后开启这个定时器

timer.schedule(task,1000,1000);每隔一秒钟更新一次

7.在onDestory()服务退出时调用如下方法:

timer.cancel;

timer = null;

task = null;

8.完成上面的service类就在我们定义的继承AppWindgetProvider类的onEnabled()方法中开启这个服务

Intent intent = new Intent(context,UpdateWidgetService.class);

context.startService(intent);

9.在onDisable()方法中停止这个服务

context.stopService(intent);

10.因为这个widget是一个广播接收者,所以生命周期只有10几秒钟,所以在关闭时,把初始化这个服务

Intent intent = new Intent(context,UpdateWidgetService.class);否则关闭服务会报空指针

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值