Hi Matthias,
Thank you for the good question (shows you're thinking).

Check the Application Fundamentals dev guide
http://developer.android.com/guide/topics/fundamentals.html

Near the bottom:

"Because a process running a service is ranked higher than one with
background activities, an activity that initiates a long-running operation
might do well to start a service for that operation, rather than simply
spawn a thread — particularly if the operation will likely outlast the
activity. Examples of this are playing music in the background and uploading
a picture taken by the camera to a web site. Using a service guarantees that
the operation will have at least "service process" priority, regardless of
what happens to the activity."

Also from the Service class doc:

"Note this means that most of the time your service is running, it may be
killed by the system if it is under heavy memory pressure. If this happens,
the system will later try to restart the service. An important consequence
of this is that if you implement
onStart()<http://developer.android.com/reference/android/app/Service.html#onStart(android.content.Intent,
int)> to schedule work to be done asynchronously or in another thread, then
you may want to write information about that work into persistent storage
during the onStart() call so that it does not get lost if the service later
gets killed."

As far as the tasks, you can probably devise a simple (and try to keep it
simple) way to track the different tasks. I'd probably add some sort of
timeout check to clear out threads that never terminated for whatever
reason.

Cheers,
James


On Wed, Oct 21, 2009 at 8:27 AM, Matthias <[email protected]> wrote:

>
> Hi,
>
> in our app we're doing background photo uploads. The current
> implementation works using a combination of a Service and an
> AsyncTask. The former will trigger the latter, which will do the
> actual network I/O.
>
> My question is: since the user can trigger many uploads in parallel,
> is this the correct implementation pattern? The problem is that I can
> never call Service.stopSelf() from an upload task when it finishes,
> because those tasks don't know anything about each other or the
> service that triggered them (because of the very nature of AsyncTask).
>
> Do I even need a Service here at all? I always thought services were
> meant for long running background tasks, but their documentation
> clearly states that one must execute blocking operations in a separate
> thread. What's the purpose of Services then? You could just fork an
> AsyncTask from an Activity, it would make no difference at all.
>
> What would you suggest doing in my case?
>
> Cheers,
> Matthias
> >
>

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

Reply via email to