Reputation: 4110
So I'm planning create an app that needs to obtain the user's location and it's going to have a class called LocationController
that implements the LocationListener
interface.
What I want to achieve is that as soon as the the main activity (call it MainActivity
for now) is started (in its onCreate
method) to call my LocationController
object and have it start getting location fixes and updates.
However, I also need to implement an IntentService or Service that will continue running even after the main activity is shut down (i.e. called onPause
and or onStop
) and this service needs to access the very same LocationController
object that the main activity started in the onCreate
method to obtain some location readings.
Now, I've spent some time looking at how to pass data to from an activity to a service and looked at Serializable
, Bundle
and Parcel
objects and none of them can pass LocationListener
or Location
objects so that's not much of an option for me (unless I missed something, in which case, I'm open to suggestions).
The other option I thought about was maybe with static objects. Basically, have the LocationController
be a static class so that the MainActivity
can call its methods to start getting location fixes but so that it also continues to exist even after MainActivity
had been terminated. However, I'm still fuzzy about how to do this. For example do I make my entire LocationController
a static object or do I make some of its methods static?
Can anyone help me with this?
UPDATE:
So I took kabuko's advice and wrote the following on the main activity class:
public void setLocationController() {
if (locationController == null)
this.locationController = new LocationController(this);
}
and
public static LocationController getLocationController() {
// make sure to have called setLocationController() early in your
// activity's life. onCreate is a good place
return this.locationController;
}
, which, sets a creates a Singleton, but to access the Location Controller in my IntentService class (call it MyService
), I accessed the location controller as a static member of the main activity class like so:
public class MyService extends IntentService {
private LocationController locationController = null;
public MyService() {
super("MyService");
locationController = MainActivity.getLocationController();
...
}
....
} // end of class
Upvotes: 1
Views: 735
Reputation: 27549
better have a service, register a locationlistener in it, and pass the location updates to Activity by sending broadcast intent, through receiver.
Upvotes: 1
Reputation: 36302
You can make a singleton instance of your LocationController
class which is essentially "making your entire LocationController
a static object". Just keep in mind that with your activity stopped, your service is the thing that maintains the lifetime of your application. If you want it long-running and handling multiple "tasks", you might want to be careful with IntentService
which shuts down once it's out of work (possibly killing your app and your singleton).
Upvotes: 1