18

Is there any fundamental difference in binding a service to an android.app.Activity vs binding it to an android.app.Application. I want to bind the service to an Application because I want to keep some global state/data in the Application instead of duplicating it in all my activities.

Thanks.

Bill the Lizard
  • 398,270
  • 210
  • 566
  • 880
Soumya Simanta
  • 11,523
  • 24
  • 106
  • 161

2 Answers2

14

No. There is no fundamental difference.

That said, subclassing android.app.Application is a very good place to store global/state data. There is only one instance and everything that derives from Context has access to it.

I'm also sure that binding a service to an application will result in some odd lifetimes if you aren't careful. What I mean is that even though your app is out of sight and has no activities alive, your application could still exist because your service still exists. Your service still exists because your application still exists. You would have to manually shut down the service based on some event other than onDestroy.

Jere.Jones
  • 9,915
  • 5
  • 35
  • 38
  • Thanks. So, there is no clean way of shutting down the service in this case. – Soumya Simanta Jul 01 '10 at 04:31
  • I gotta ask, why do you want a service if you are going to store the data in the Application object? All of your activities have access to the app object via getApplication(). – Jere.Jones Jul 01 '10 at 04:37
  • The service is going to perform all the I/O. I'm trying to implement something like http://stackoverflow.com/questions/3141632/android-service-interacting-with-multiple-activities Maybe I can store this global data/state in my service (?). Don't know if that's good design or bad design because this is the first time I'm working with multiple activities and services. – Soumya Simanta Jul 01 '10 at 04:50
4

answer of @Jere.Jones is not 100% correct. You have one Instance of Application class per Process. So if you run your service in a seperate Process e.g. with

 <service
        android:name=".engine.NetworkService"
        android:exported="false"
        android:process=":xxxService" />

you have two seperate Instances of Appliaction, which means if you need to "hold a state" you must ensure its either not Process crossing, or you have to use IPC to sync these sates.

Denny1989
  • 639
  • 1
  • 9
  • 15