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 -~----------~----~----~----~------~----~------~--~---

