summaryrefslogtreecommitdiffstats
path: root/docs/html/guide/topics/processes/process-lifecycle.jd
diff options
context:
space:
mode:
authorThe Android Open Source Project <initial-contribution@android.com>2009-03-03 18:28:45 -0800
committerThe Android Open Source Project <initial-contribution@android.com>2009-03-03 18:28:45 -0800
commitd83a98f4ce9cfa908f5c54bbd70f03eec07e7553 (patch)
tree4b825dc642cb6eb9a060e54bf8d69288fbee4904 /docs/html/guide/topics/processes/process-lifecycle.jd
parent076357b8567458d4b6dfdcf839ef751634cd2bfb (diff)
downloadframeworks_base-d83a98f4ce9cfa908f5c54bbd70f03eec07e7553.zip
frameworks_base-d83a98f4ce9cfa908f5c54bbd70f03eec07e7553.tar.gz
frameworks_base-d83a98f4ce9cfa908f5c54bbd70f03eec07e7553.tar.bz2
auto import from //depot/cupcake/@135843
Diffstat (limited to 'docs/html/guide/topics/processes/process-lifecycle.jd')
-rw-r--r--docs/html/guide/topics/processes/process-lifecycle.jd120
1 files changed, 0 insertions, 120 deletions
diff --git a/docs/html/guide/topics/processes/process-lifecycle.jd b/docs/html/guide/topics/processes/process-lifecycle.jd
deleted file mode 100644
index 0380f94..0000000
--- a/docs/html/guide/topics/processes/process-lifecycle.jd
+++ /dev/null
@@ -1,120 +0,0 @@
-page.title=Processes and Application Life Cycle
-@jd:body
-
-<p>In most cases, every Android application runs in its own Linux process.
-This process is created for the application when some of its code needs to
-be run, and will remain running until it is no longer needed <em>and</em>
-the system needs to reclaim its memory for use by other applications.</p>
-
-<p>An unusual and fundamental feature of Android is that an application process's
-lifetime is <em>not</em> directly controlled by the application itself.
-Instead, it is determined by the system through a combination of the parts of the application
-that the system knows are running, how important these things are to the user,
-and how much overall memory is available in the system.</p>
-
-<p>It is important that
-application developers understand how different application components
-(in particular {@link android.app.Activity}, {@link android.app.Service},
-and {@link android.content.BroadcastReceiver}) impact the lifetime
-of the application's process. <strong>Not using these components correctly can
-result in the system killing the application's process while it is doing
-important work.</strong></p>
-
-<p>A common example of a process life-cycle bug is a
-{@link android.content.BroadcastReceiver} that starts a thread when it
-receives an Intent in its {@link android.content.BroadcastReceiver#onReceive
-BroadcastReceiver.onReceive()}
-method, and then returns from the function. Once it returns, the system
-considers the BroadcastReceiver to be no longer active, and thus, its hosting
-process no longer needed (unless other application components are active in
-it). So, the system may kill the process at any time to reclaim memory, and in doing so,
-it terminates the spawned thread running in the process. The solution to this problem
-is to start a {@link android.app.Service} from the BroadcastReceiver, so the
-system knows that there is still active work being done in the process.</p>
-
-<p>To determine which processes should be killed when low on memory, Android
-places each process into an "importance hierarchy" based on the components running in
-them and the state of those components. These process types are (in order of importance):</p>
-
-<ol>
-
-<li>A <strong>foreground process</strong> is one that is required for
-what the user is currently doing. Various application components can
-cause its containing process to be considered foreground in different
-ways. A process is considered to be in the foreground if any of the
-following conditions hold:
- <ul>
- <li> It is running an {@link android.app.Activity}
- at the top of the screen that the user is interacting with (its
- {@link android.app.Activity#onResume} method has been called).</li>
- <li> It has a {@link android.content.BroadcastReceiver} that is currently running
- (its {@link android.content.BroadcastReceiver#onReceive
- BroadcastReceiver.onReceive()} method is executing).</li>
- <li>It has a {@link android.app.Service} that is currently executing code
- in one of its callbacks ({@link android.app.Service#onCreate Service.onCreate()},
- {@link android.app.Service#onStart Service.onStart()}, or
- {@link android.app.Service#onDestroy Service.onDestroy()}).</li>
- </ul>
-</li>
-<p>There will only ever be a few such processes in the system, and these will only
-be killed as a last resort if memory is so low that not even these processes
-can continue to run. Generally, at this point, the device has
-reached a memory paging state, so this action is required in order to keep the user
-interface responsive.</p>
-</li>
-
-<li>A <strong>visible process</strong> is one holding an {@link android.app.Activity}
-that is visible to the user on-screen but not in the foreground (its
-{@link android.app.Activity#onPause} method has been called). This may
-occur, for example, if the foreground Activity is displayed as a dialog
-that allows the previous Activity to be seen behind it. Such a
-process is considered extremely important and will not be killed unless doing so is
-required to keep all foreground processes running.
-</li>
-
-<li>A <strong>service process</strong> is one holding a {@link android.app.Service}
-that has been started with the
-{@link android.content.Context#startService startService()} method. Though these
-processes are not directly visible to the user, they are generally doing things
-that the user cares about (such as background mp3 playback or background
-network data upload or download), so the system will always keep such processes
-running unless there is not enough memory to retain all foreground and visible process.
-</li>
-
-<li>A <strong>background process</strong> is one holding an {@link android.app.Activity}
-that is not currently visible to the user (its
-{@link android.app.Activity#onStop} method has been called). These processes
-have no direct impact on the user experience. Provided they implement
-their Activity life-cycle correctly
-(see {@link android.app.Activity} for more details), the system
-can kill such processes at any time to reclaim memory for one of the three
-previous processes types. Usually there are many of these processes running,
-so they are kept in an LRU list to ensure the process that was most recently seen
-by the user is the last to be killed when running low on memory.
-</li>
-
-<li>An <strong>empty process</strong> is one that doesn't hold any active application
-components. The only reason to keep such a process around is as a cache to
-improve startup time the next time a component of its application needs to
-run. As such, the system will often kill these processes in order to
-balance overall system resources between these empty cached processes and the
-underlying kernel caches.
-</li>
-
-</ol>
-
-<p>When deciding how to classify a process, the system will base its decision on the most
-important level found among all the components currently active in the process.
-See the {@link android.app.Activity}, {@link android.app.Service}, and
-{@link android.content.BroadcastReceiver} documentation for more detail on how
-each of these components contribute to the overall life-cycle of a process.
-The documentation for each of these classes describes in more detail how
-they impact the overall life-cycle of their application.</p>
-
-<p>A process's priority may also be increased based on other dependencies
-a process has to it. For example, if process A has bound to a
-{@link android.app.Service} with
-the {@link android.content.Context#BIND_AUTO_CREATE Context.BIND_AUTO_CREATE}
-flag or is using a
-{@link android.content.ContentProvider} in process B, then process B's
-classification will always be at least as important as process A's.</p>