I’m in the process of porting an app originally developed on iOS to Android. I’m trying to accomplish the following:
- every time the app is started, call the start() method on a Manager class
- every time the user leaves the app, call the stop() method on the same Manager class
- every time the user comes back to the app (resuming from idle), call the start() method on the Manager class
The so-called Manager class handshakes with a server on the Internet and needs to do a variety of book-keeping activities every time the user the user enters and leaves the app.
Whereas iOS enables you to subclass the UIAppDelegate class and have code that runs when the app starts, ends, or resumes from idle, it seems Android doesn’t have an equivalent approach. Instead, these are the options with Android:
1) Activity class: methods for every time an Activity (view) is created, stopped, or resumed
2) Application class: onStart and onDestroy for every time the app is started or killed
3) Service mechanism to create a background task that can be used to perform long-living operations in the background while the app is active or even while its not active
None of the above align real well with what I’m used to in iOS. Option 1 would require every Activity in the app’s view hierarchy to have code that runs when the app starts/stops/resumes. Of the 3, I sense option 3 is more relevant. I’m just not entirely clear how I could start/stop a service in Android as the user starts/stops/resumes an app without regard to the specific activity they’re on at the time.
I would appreciate input from Android developers or developers that work on both iOS and Android.
This might be a valid design pattern on iOS — I have no idea. It is not a valid design pattern on Android. You don’t “leave the app” on Android any more than you “leave the app” in a Web app. “Leave” is determined mostly as “you didn’t come back in a while” in both Android and Web apps.
Note that the method is
onTerminate(), notonDestroy(), and it actually never gets called. TheApplicationobject is created when the process is and lives until the process is terminated outright.You might elect to use a service for doing the “handshaking” — in fact, that’s probably likely.
However, there is nothing built in for “leave the app”. I would strongly encourage you to simply get rid of the concept entirely.
If not, you’re welcome to rig up a service that is notified on each
onPause()andonResume(), does the bookkeeping to see if there are any live activities, and if there hasn’t been for X period of time, does your “leave the app” logic, then shuts down. You’d also trigger the “leave the app” logic inonDestroy(), if the service is shutting down at OS request vs. your own shutdown request. This is not 100% guaranteed to work — users can force-stop your service and the OS can kill the process with impunity.