When you swipe an app off your Android currently-running-apps list, what exactly happens to the application and data? Read on as we investigate.
Today’s Question & Answer session comes to us courtesy of Android Enthusiast—a subdivision of Stack Exchange, a community-driven grouping of Q&A web sites.
Android Enthusiast reader Eldarerathis is curious about the app-swipe functionality that allows you to pull up your list of running apps via the home button and then swipe them to the right, presumably to close them:
The recent apps list in Ice Cream Sandwich added the ability to swipe apps out of the list, thereby dismissing them permanently (and as far as I know this is a vanilla function, not a CM/custom ROM one). The documentation and platform highlights don’t appear to cover the under-the-hood workings of this functionality, but I’m curious to know what the system is actually doing.
Further adding to my curiosity, I decided to do a quick test: I started up Music on a CM9 install, then backed out of it. I then checked the recent apps list and saw it was indeed there (and in the proper state, based on the thumbnail). I then went into
Settings->Applicationsand force stopped the Music app, but it was still listed in the recent list, leading me to believe it’s not connected to processes lingering in the background.
Realizing now that Music may have been a poor choice, I also tested with the USA Today app. This exhibited basically the same behavior, and it seemed like it was forced to “relaunch” after the force stop (which makes sense) though the thumbnail in the recent apps list didn’t reflect this (cached, I’m guessing?).
So, what actually happens at the OS level when you swipe an app out of the recent list? Does it simply clear the app’s data out of RAM and garbage collect it, destroying its saved state?
What exactly is going on when you swipe the app off the list?
Android Enthusiast contributor Austin Mills offers some insight:
Swiping apps out of the recent apps list is vanilla, and yes, not well documented. This has been the topic of a decent amount of discussion on various Android forums… the consensus seems to be best described here in some comments: that the behavior is similar to but not exactly the same as closing an app — in general (for apps that don’t define explicit back button handling) it’s the same thing as hitting back enough times from within an application that you exit out of it.
The link has some more details on the specifics, but overall you can think of it as quitting the application.
Specific to the Music app, I believe it starts a service, so while the task itself (the Music app/UI) may be closed, the service continues to run in the background so that your music doesn’t suddenly stop just because the task got cleared out for memory management reasons. That may have affected what you saw.
Then, participating in the question-and-answer circle of life, Eldarerathis came back with some research of his own to round out the answer:
I appear to have found the magical search terms that led to some explanations from Google employees. Specifically, I found a couple of different places where Dianne Hackborn explains what happens when you swipe something out of the recent list. The first is a comment on one of her Google+ posts:
[W]hat specifically happens when you swipe away a recent task is it: (1) kills any background or empty processes of the application (see here for what this means), and (2) uses the new API to tell any services of the application about the task being removed so it can do whatever it thinks is appropriate.
She also notes in a blog comment:
Actually, removing an entry in recent tasks will kill any background processes that exist for the process. It won’t directly causes services to stop, however there is an API for them to find out the task was removed to decide if they want this to mean they should stop. This is so that removing say the recent task of an e-mail app won’t cause it to stop checking for e-mail.
If you really want to completely stop an app, you can long press on recent tasks to go to app info, and hit force stop there. Force stop is a complete kill of the app — all processes are killed, all services stopped, all notifications removed, all alarms removed, etc. The app is not allowed to launch again until explicitly requested.
So, it looks like the summary is that swiping an app out of the list will first kill all background processes for the app, then use
onTaskRemovedto notify the app that the background task was removed. At that point it looks like it’s up to the app to decide what happens, so I guess there technically isn’t a hard-and-fast rule about what happens to the app beyond that point.
Have something to add to the explanation? Sound off in the the comments. Want to read more answers from other tech-savvy Stack Exchange users? Check out the full discussion thread here.