Take the 2-minute tour ×
Android Enthusiasts Stack Exchange is a question and answer site for enthusiasts and power users of the Android operating system. It's 100% free, no registration required.

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->Applications and 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?

share|improve this question
add comment

5 Answers 5

up vote 31 down vote accepted

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.

share|improve this answer
1  
Thanks, that link has a lot of good discussion. You also might be right re: Music, that may have been a poor test. I'll try another app, just for kicks. –  eldarerathis Feb 28 '12 at 15:28
2  
Going to go ahead and accept this since the reddit discussion helped me find some better search terms, and seemed to be corroborated by some posts by Dianne Hackborn which I noted in my answer. Thanks! –  eldarerathis Mar 16 '12 at 1:00
1  
1  
Perfect thank you! For me this post helped me: reddit.com/r/Android/comments/mpevh/… –  Boris Strandjev Oct 3 '13 at 9:18
add comment

It closes the app, and its data is stored in the RAM. Thus, giving you more RAM space so you can run other apps.

share|improve this answer
    
Although written in everyday language, this is actually a fairly accurate answer - it captures the fact that the process is disposed of, something a lot of the other answers (those mistakenly comparing it to the back button) are missing. However, what is missing here is the realization that Android will dispose of processes when needed to obtain memory anyway, so while it accomplishes some memory cleanup, that would happen automatically if/when needed. –  Chris Stratton Jun 2 at 14:27
add comment

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 http://developer.android.com/guide/topics/fundamentals/processes-and-threads.html#Lifecycle for what this means), and (2) uses the new http://developer.android.com/reference/android/app/Service.html#onTaskRemoved(android.content.Intent) 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. For 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 onTaskRemoved to 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.

share|improve this answer
    
That's certainly non-obvious behavior, very interesting! –  Matthew Read Mar 16 '12 at 19:53
add comment

I think it will do the same as the back button do. Except one little change. It will finish() all activity / fragments in the app.

Just did a little testing with a little selfbuild app. You can test, too. Heres my testing app: https://bitbucket.org/Leandros99/lifecycletest (download available, too. For those who cant build.)
In every Activity lifecycle method (http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle) print the app a log. You can view it with adb logcat (install Android SDK, cd to platform-tools in cmd / shell and type adb logcat. Now you will see, everytime you do something like hit back or home button, the app prints the lifecycle method, mentioned above.)

Your question: If I swipe a app from the recent apps drawer, the onDestroy method will be called. It does nearly the same as the back button.
Hope I helped a bit. If there are questions, just ask.

share|improve this answer
add comment

There's some info in the source code in the classes com.android.internal.policy.impl.RecentApplicationsBackground and com.android.internal.policy.impl.RecentApplicationsDialog.

If I read these correctly, there are specific handlers for selecting the apps but nothing special for swiping them except for onDetachedFromWindow(), which calls com.android.View.onDetachedFromWindow() which basically hides the element and clears it's data. This would hint to the fact that nothing special happens on swiping the app, which corresponds with Austin Mills' answer, because since the list doesn't show the active app, the onPause() and other system calls that are done when "quitting" an application have already happened.

share|improve this answer
add comment

protected by Community Jun 28 at 15:49

Thank you for your interest in this question. Because it has attracted low-quality answers, posting an answer now requires 10 reputation on this site.

Would you like to answer one of these unanswered questions instead?

Not the answer you're looking for? Browse other questions tagged or ask your own question.