Jake,
Using a service for a widget that's not doing anything lengthy to
prepare updates seems like a bit of an overkill. Certainly it works, but
probably not necessary.
On the other hand, using a service is definitely the way to go for
widgets that fetch data from the Internet or some other way that can
take a long time.
Another issue is - this is all good, until someone uses a task killer,
discovers the service, complains that the widget "spanws an unnecessary
service that uses too much memory and cpu time", kills it, and
uninstalls. Has happened to me.
Good thing Android 2.x includes great tools to show how memory and
battery are used.
I hope users learn to use these tools and exercise good judgement before
killing a service just because it's there.
-- Kostya
23.06.2010 20:15, Jake Colman пишет:
Kostya,
That makes perfect sense. It seems like a service-based update is
really the right way to go. It avoids any potential timeout issue and
is allows updating of all widgets at once.
Thanks for your help.
...Jake
"KV" == Kostya Vasilyev<kmans...@gmail.com> writes:
KV> Jake,
KV> onUpdate is passed an explicit list of just the widget ids that
KV> need to be updated. Supposedly, there could be widgets that
KV> belong to this provider but don't need updating (e.g. on a
KV> scrolled-off home screen portion).
KV> Pushing a RemoveViews object to a paricular widget is done by
KV> calling:
KV> manager.updateAppWidget(int widgetId, updateViews);
KV> It's also possible to update all widgets that belong to a
KV> particular widget provider, and this is the approach
KV> service-based widgets take, supposedly to avoid paying service
KV> start-up costs for each widget id.
KV> In this case, a single RemoteViews is pushed to all widgets with
KV> a single call to:
KV> manager.updateAppWidget(ComponentName thisWidget, updateViews);
KV> -- Kostya
KV> 23.06.2010 18:57, Jake Colman пишет:
>> Kostya,
>>
>> Thanks. That worked like a charm.
>>
>> I noticed in sample AppWidget code that does not use a service, that it
>> iterates the appWidgetIds array so that it updates all instances of the
>> widget. However, in sample code that uses a Service, that iteration is
>> not done. Is that because it is not needed for some reason? How would
>> one update multiple instances using a service-based solution?
>>
>> Thanks.
>>
>> ...Jake
>>
>>
>>>>>>> "KV" == Kostya Vasilyev<kmans...@gmail.com> writes:
>>>>>>>
KV> Jake,
>>
KV> The error is in the way your code instantiates ComponentName.
>>
KV> Instead of:
>>
KV> ComponentName thisWidget = new ComponentName(this,
KV> ZMUpdateService.class);
>>
KV> Do this:
>>
KV> ComponentName thisWidget = new
KV> ComponentName(this,*ZmanMinderAppWidget*.class);
>>
KV> The error message was trying to convey same thing...
>>
KV> -- Kostya
>>
KV> 23.06.2010 17:39, Jake Colman ?????:
>> >> I am trying to create a simple AppWidget using a service to
>> >> initialize
>> >> the content in the onUpdate() method. The data is not being
>> >> refreshed
>> >> and logcat shows me the following warning:
>> >>
>> >> AppWidgetService W updateAppWidgetProvider: provider doesn't exist:
>> >>
ComponentInfo{com.jnc.zmanminder/com.jnc.zmanminder.ZMUpdateService}
>> >>
>> >> I must be missing something obvious but I cannot figure it out.
>> >>
>> >> My AppWidget class (edited for brevity) looks as follows:
>> >>
>> >> public class ZmanMinderAppWidget extends AppWidgetProvider {
>> >> public void onUpdate(Context context,
>> >> AppWidgetManager appWidgetManager, int[] appWidgetIds) {
>> >> context.startService(new Intent(context, ZMUpdateService.class));
>> >> }
>> >> }
>> >>
>> >> My Service class (edited for brevity) looks as follows:
>> >>
>> >> public class ZMUpdateService extends Service {
>> >> public void onStart(Intent intent, int startId) {
>> >> RemoteViews updateViews = buildUpdate(this);
>> >> ComponentName thisWidget = new ComponentName(this,
>> >> ZMUpdateService.class);
>> >> AppWidgetManager manager = AppWidgetManager.getInstance(this);
>> >> manager.updateAppWidget(thisWidget, updateViews);
>> >> }
>> >>
>> >> public IBinder onBind(Intent arg0) {
>> >> return null;
>> >> }
>> >>
>> >> public RemoteViews buildUpdate(Context context) {
>> >> Time time = new Time();
>> >> time.setToNow();
>> >> RemoteViews views = new
>> >> RemoteViews(context.getPackageName(),R.layout.widget);
>> >> views.setTextViewText(R.id.time, time.format("%I:%M%p"));
>> >> return views;
>> >> }
>> >> }
>> >>
>> >> The ZMUpdateService service is defined in my manifest file.
>> >>
>> >> Thanks for any help.
>> >>
>> >> ...Jake
>> >>
>> >>
>> >>
>>
KV> --
KV> Kostya Vasilev -- WiFi Manager + pretty widget --
KV> http://kmansoft.wordpress.com
>>
KV> --
KV> You received this message because you are subscribed to the Google
KV> Groups "Android Beginners" group.
>>
KV> NEW! Try asking and tagging your question on Stack Overflow at
KV> http://stackoverflow.com/questions/tagged/android
>>
KV> To unsubscribe from this group, send email to
KV> android-beginners+unsubscr...@googlegroups.com
KV> For more options, visit this group at
KV> http://groups.google.com/group/android-beginners?hl=en
>>
>>
KV> --
KV> Kostya Vasilev -- WiFi Manager + pretty widget --
KV> http://kmansoft.wordpress.com
KV> --
KV> You received this message because you are subscribed to the Google
KV> Groups "Android Beginners" group.
KV> NEW! Try asking and tagging your question on Stack Overflow at
KV> http://stackoverflow.com/questions/tagged/android
KV> To unsubscribe from this group, send email to
KV> android-beginners+unsubscr...@googlegroups.com
KV> For more options, visit this group at
KV> http://groups.google.com/group/android-beginners?hl=en
--
Kostya Vasilev -- WiFi Manager + pretty widget -- http://kmansoft.wordpress.com
--
You received this message because you are subscribed to the Google
Groups "Android Beginners" group.
NEW! Try asking and tagging your question on Stack Overflow at
http://stackoverflow.com/questions/tagged/android
To unsubscribe from this group, send email to
android-beginners+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-beginners?hl=en