Widget的救命稻草 Service

Widget的救命稻草 Service



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启动的服务如果已经启动了,执行这个语句将会保持服务的运行。

你可能感兴趣的:(android,PHP,工作)