My activities start long running jobs that involve network
communication. So handling these jobs with an IntentService seems
perfectly reasonable. I also need to handle the results of these jobs,
if the Activity that started this is "active" in the time of
completion. The case that gave me a headache is what if the device is
in the middle of a rotation, and the Service finishes a job?

Currently, the service broadcasts an intent with the results as
extras. The activities register and unregister a receiver for this
completion-intent in onResume and onPaused. This way I don't have to
tell the service explicitly, which listener it has to notify upon
completion, it only has to make a broadcast. But with this design I
can't handle cases where the job finishes, but the Acitivity is not
resumed - it might be in the middle of a rotation, or the user
could've switched to another app temporarily, etc.

So I had the idea to implement a "postbox" pattern: I'd extend the
Application object (or use a static object) that has a postbox object.
The IntentService puts the results of the completed jobs inside this
box, with a unique jobId, and makes a broadcast indicating that the
postbox has new things. If an Acitivty is active, it receives this
broadcast, checks the postbox, and handles the results as needed.
Besides, every Acitivity checks the postbox in onResume(), for
possible missed messages containing job-results.

I'm avare that static objects could be destroyed without notice. But
this pattern might solve the rotation problem stated above - I'm quite
sure that the Application object survives the device rotation, or am I
missing something?

So what do you think of this pattern? Is there something fatal I
missed?

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