There are a few reasons why I want to do this in a service:

1) In my development roadmap, the web services interface will
eventually be contained in a content provider accessed by multiple
applications. The service container is a good intermediate step.
2) A lot of things can happen when web services are involved - some
data fetches might time out, the network might be unavailable or
congested, the server might throttle the number of parallel fetches
allowed for a given account. The service container is a good place to
handle the complex logic of handling all these conditions and
presenting a sensible result to the data consumer.
3) I'm dealing with a collection of web services, each of which has
its own authentication policies. The service container is a good place
to manage that.

On Nov 4, 1:22 pm, Dianne Hackborn <hack...@android.com> wrote:
> Thanks, that helps.
>
> First question: do you really want to use a Service at all?  This sounds
> like a typical scenario where an app would just start a thread in the
> background to fetch the data.  Basically how the browser works.
>
> You actually don't want a service for this kind of thing, because for the
> case it makes a difference (the user leaves your app, memory is running low,
> and now we are looking for things to kill) it would be better to *let* the
> system kill your process than to put it into a tighter fix by telling it
> with a Service that you should be kept around.  Since you can always
> re-fetch the data from the server, the absolute worst case of not using a
> service is that when the user returns to your app whatever you were in the
> process of fetching when they left is still not there and needs to be
> fetched again.
>
> This is the kind of thing where I would just make a singleton for my data
> access, that has a thread to do network fetches in the background.  When an
> activity wants to show the data, it gets the singleton, asks for the data,
> and gives a callback to be called when the data is ready (if it wasn't
> immediately available).
>
>
>
> On Thu, Nov 4, 2010 at 8:19 AM, Bret Foreman <bret.fore...@gmail.com> wrote:
> > Dianne,
>
> > Let me back up and give more context. My Activity draws various
> > TextViews and other UI elements with data from a local SQLite
> > database. When it can't find the data it needs locally, it draws a
> > placeholder icon and generates a request to a web service for the
> > data. The interface to the web service is enclosed in an IntentService
> > which handles the background activity associated with the web service.
> > When the data comes back, the IntentService places it in the SQLite
> > database and generates a broadcast Intent back to the Activity, which
> > has registered a receiver to receive the Intent. The Intent includes a
> > tag so the Activity knows which UI element can now be drawn with local
> > data. This tag is held in an Extra Bundle inside the Intent.
>
> > This all works about 2/3 of the time. However, about 1/3 of the
> > messages are being "lost" somehow. No exceptions are being thrown and
> > there is no message in the logcat that seems associated with the
> > receiver dropping messages.
>
> > One added wrinkle is that my Activity encounters 10 UI elements where
> > local data is missing and so it generates 10 calls to the
> > IntentService in the space of a few milliseconds. 6 or 7 Intents are
> > returned and 3 or 4 are missing. The exact number returned varies
> > depending on the run. The entire process takes about 10 seconds.
>
> > My understanding from Mark Murphy is that this is expected behavior,
> > that Intents that look similar and arrive close by in time are
> > considered duplicates and one of them is dropped.
>
> > This behavior is not that hard to demonstrate in a test project so I
> > could generate a case in b.android.com if you think what's happening
> > is contrary to what should happen. It occurs to me that the Android
> > regression tests may not cover the case of multiple calls to the
> > IntentService spaced over a short period of time and sending back
> > multiple Intents. If you think the behavior I'm seeing is incorrect
> > then it sounds like there is a concurrency problem in the
> > sendBroadcast method of the IntentService. Maybe sendBroadcast is not
> > re-entrant?
>
> > On Nov 3, 8:15 pm, Dianne Hackborn <hack...@android.com> wrote:
> > > I can't even follow what you are doing.  First you were talking about
> > > broadcast receivers, now you are talking about
> > Activity.createPendingResult.
>
> > > Could we back up and start with a high-level picture of what you are
> > trying
> > > to accomplish?
>
> > --
> > You received this message because you are subscribed to the Google
> > Groups "Android Developers" group.
> > To post to this group, send email to android-developers@googlegroups.com
> > To unsubscribe from this group, send email to
> > android-developers+unsubscr...@googlegroups.com<android-developers%2bunsubscr...@googlegroups.com>
> > For more options, visit this group at
> >http://groups.google.com/group/android-developers?hl=en
>
> --
> Dianne Hackborn
> Android framework engineer
> hack...@android.com
>
> Note: please don't send private questions to me, as I don't have time to
> provide private support, and so won't reply to such e-mails.  All such
> questions should be posted on public forums, where I and others can see and
> answer them.

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to