What is Android Application Process Priorities?
The order in which processes are killed to reclaim resources is determined by the priority of the hosted applications. An application’s priority is equal to its highest-priority component.
Android Application Process Priorities are also affected by inter process dependencies; if an application has a dependency on a Service or Content Provider supplied by a second application, the secondary application will have at least as high a priority as the application it supports.
Ex: If two applications have the same priority, the process that has been at a lower priority longest will be killed first.
Types of Processes and Priorities
The following list details each of the application states shown in Figure, explaining how the state is determined by the application components comprising it.
All Android applications will remain running and in memory until the system needs resources for other applications.
Active (foreground) processes have application components interacting with the user. These are the processes Android is trying to keep responsive by reclaiming resources. There are generally very few of these processes, and they will be killed only as a last resort. Active processes include:
- Activities in an ‘‘active’’ state; that is, those in the foreground responding to user events.
- You will explore Activity states in greater detail later in this chapter. Broadcast Receivers executing onReceive event handlers.
- Services executing onStart, onCreate, or onDestroy event handlers.
- Running Services that have been flagged to run in the foreground.
Visible processes are Visible but inactive processes are those hosting ‘‘visible’’ Activities. As the name suggests, visible Activities are visible, but they aren’t in the foreground or responding to user events.
- This happens when an Activity is only partially obscured (by a non-full-screen or transparent Activity).
- There are generally very few visible processes, and they’ll be killed only under extreme circumstances to allow active processes to continue.
Started Service Process
Started Service processes Processes hosting Services that have been started.
- Services support ongoing processing that should continue without a visible interface.
- Because background Services don’t interact directly with the user, they receive a slightly lower priority than visible Activities.
- They are still considered foreground processes and won’t be killed unless resources are needed for active or visible processes.
Background processes are hosting Activities that aren’t visible and that don’t have any running Services. There will generally be a large number of background processes that Android will kill using a last-seen-first-killed pattern in order to obtain resources for foreground processes.
Empty processes are to improve overall system performance, Android will often retain an application in memory after it has reached the end of its lifetime.
Android maintains this cache to improve the start-up time of applications when they’re relaunched. These processes are routinely killed as required.