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

Reply via email to