Widget的救命稻草 Service

本文探讨了AppWidget在Android系统中的局限性,并介绍了如何利用Service来增强Widget的功能。通过Service进行后台任务处理,再通过广播更新Widget,实现了Widget的动态刷新。此外,还介绍了如何使用PendingIntent实现Widget与外部组件之间的交互。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[color=red][size=large]Widget的救命稻草 Service
[/size][/color]


Appwidget的贫弱 不仅仅是在已经被我们无奈的布局上。appWidget还被Android做了很多限制,甚至Widget不能调用线程!



如果你要在AppwidgetProvider里面写东西,你所能调用的资源相当有限。



我感觉apwidget像是寄生在Home程序中的,所以也受相应的很多限制。我们的经验告诉我们,除了在RemoteViews中方一些固定的东西,不要指望你的widget能自己做什么,最好的方法是让他当一个被动接受的傀儡。



既然Widget成了傀儡了,那么我们就应该把更多的事务交给别人。Service就是个很好的选择,他可以让Widget重焕生机。



其实Service 是Activity还有Appwidget都可以调用的东西。而且他也有很高的灵活度。



而且更加重要的是,你甚至可以存在于你的Widget里面作为一个内部类。因为Service占用了进程,他可以完成很多Widget无法做到的事情。



Service在做好了自己的工作以后,可以用广播的形式发送给Widget,因为appWidgetManager可以在Widget之外调用,那么我们完全可以在Service里面控制Widget的更新。



Widget的接受方法解释使用BroadcastReceiver原声的继承方法,在本篇调用系统时钟那个例子就很好的讲述了这个方法。



6. 从Widget逃出来的信息



如果什么事情都让别人来做,也不好,appwidget虽然被限制很多,但是我们还是有办法从Widget分出点东西来。RemoteViews给我们提供了原生的 setOnClickPendingIntent方法。



PendingIntent这个想必大家都应该很清楚。因为RemoteViews没有按键时间,所以这个方法就可以出发PendingIntent。



而Widget的点击事件很有特点,之前点击我们Activity的控件,会有专门的按键监听,他会根据案件的ID,来控制按键范围,比如你的ImageViewButton的id 是 R.id.imagebutton。

在下面你只要引入将这个id,按钮事件发出只会在你点击这个区域以后才会发生。



下面这个例子就是点击整个Widget的时候会触发时间。



updateViews = new RemoteViews(context.getPackageName(), R.layout.widget_word);



updateViews.setOnClickPendingIntent(R.id.widget, pendingIntent);



PendingIntent被出发后,发出信息,所以送出送出的消息全部在Intent里面。



至于Android上的传值,大家可以去这个地址来学习一下。

http://www.eoeandroid.com/viewthread.php?tid=967&extra=page%3D1

我觉得我讲的还算是很明白的。



PendingIntent提供了三种方法,一个事getActivity()另一个是getBroadcast()最后一个事getService()



从字面上我们就可以看出这三种方法是启动一个新的Activity、发送一个广播、还有启动一个服务。getService启动的服务如果已经启动了,执行这个语句将会保持服务的运行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值