diff options
author | The Android Open Source Project <initial-contribution@android.com> | 2009-03-03 18:28:45 -0800 |
---|---|---|
committer | The Android Open Source Project <initial-contribution@android.com> | 2009-03-03 18:28:45 -0800 |
commit | d83a98f4ce9cfa908f5c54bbd70f03eec07e7553 (patch) | |
tree | 4b825dc642cb6eb9a060e54bf8d69288fbee4904 /docs/html/guide/appendix/faq/framework.jd | |
parent | 076357b8567458d4b6dfdcf839ef751634cd2bfb (diff) |
auto import from //depot/cupcake/@135843
Diffstat (limited to 'docs/html/guide/appendix/faq/framework.jd')
-rw-r--r-- | docs/html/guide/appendix/faq/framework.jd | 198 |
1 files changed, 0 insertions, 198 deletions
diff --git a/docs/html/guide/appendix/faq/framework.jd b/docs/html/guide/appendix/faq/framework.jd deleted file mode 100644 index 76a19c56d19d..000000000000 --- a/docs/html/guide/appendix/faq/framework.jd +++ /dev/null @@ -1,198 +0,0 @@ -page.title=Android Application Framework FAQ -parent.title=FAQs, Tips, and How-to -parent.link=index.html -@jd:body - -<ul> - <li><a href="#1">Do all the Activities and Services of an - application run in a single process?</a></li> - <li><a href="#2">Do all Activities run in the main thread of - an application process?</a></li> - <li><a href="#3">How do I pass complicated data structures - from one Activity/Service to another?</a></li> - <li><a href="#4">How can I check if an Activity is already - running before starting it?</a></li> - <li><a href="#5">If an Activity starts a remote service,is - there any way for the Service to pass a message back to the Activity?</a></li> - <li><a href="#6">How to avoid getting the Application not - responding dialog?</a></li> - <li><a href="#7">How does an application know if a package is - added or removed?</a></li> -</ul> - -<!-- ------------------------------------------------------------------ --> - -<a name="1" id="1"></a> - -<h2>Do all the Activities and Services of an application run in a -single process?</h2> - -<p>All Activities and Services in an application run in a single process by -default. If needed, you can declare an <code>android:process</code> attribute -in your manifest file, to explicitly place a component (Activity/Service) in -another process.</p> - -<!-- ------------------------------------------------------------------ --> - -<a name="2" id="2"></a> - -<h2>Do all Activities run in the main thread of an application -process?</h2> - -<p>By default, all of the application code in a single process runs -in the main UI thread. This is the same thread -that also handles UI events. The only exception is the code that handles -IPC calls coming in from other processes. The system maintains a -separate pool of transaction threads in each process to dispatch all -incoming IPC calls. The developer should create separate threads for any -long-running code, to avoid blocking the main UI thread.</p> - -<!-- ------------------------------------------------------------------ --> - -<a name="3" id="3"></a> - -<h2>How do I pass data between Activities/Services within a single -application?</h2> - -<p>It depends on the type of data that you want to share:</p> - -<h3>Primitive Data Types</h3> - -<p>To share primitive data between Activities/Services in an -application, use Intent.putExtras(). For passing primitive data that -needs to persist use the -<a href="{@docRoot}guide/topics/data/data-storage.html#preferences"> -Preferences</a> storage mechanism.</p> - -<h3>Non-Persistent Objects</h3> - -<p>For sharing complex non-persistent user-defined objects for short -duration, the following approaches are recommended: -</p> - <h4>The android.app.Application class</h4> - <p>The android.app.Application is a base class for those who need to -maintain global application state. It can be accessed via -getApplication() from any Activity or Service. It has a couple of -life-cycle methods and will be instantiated by Android automatically if -your register it in AndroidManifest.xml.</p> - - <h4>A public static field/method</h4> - <p>An alternate way to make data accessible across Activities/Services is to use <em>public static</em> -fields and/or methods. You can access these static fields from any other -class in your application. To share an object, the activity which creates your object sets a -static field to point to this object and any other activity that wants to use -this object just accesses this static field.</p> - - <h4>A HashMap of WeakReferences to Objects</h4> - <p>You can also use a HashMap of WeakReferences to Objects with Long -keys. When an activity wants to pass an object to another activity, it -simply puts the object in the map and sends the key (which is a unique -Long based on a counter or time stamp) to the recipient activity via -intent extras. The recipient activity retrieves the object using this -key.</p> - - <h4>A Singleton class</h4> - <p>There are advantages to using a static Singleton, such as you can -refer to them without casting getApplication() to an -application-specific class, or going to the trouble of hanging an -interface on all your Application subclasses so that your various -modules can refer to that interface instead. </p> -<p>But, the life cycle of a static is not well under your control; so -to abide by the life-cycle model, the application class should initiate and -tear down these static objects in the onCreate() and onTerminate() methods -of the Application Class</p> -</p> - -<h3>Persistent Objects</h3> - -<p>Even while an application appears to continue running, the system -may choose to kill its process and restart it later. If you have data -that you need to persist from one activity invocation to the next, you -need to represent that data as state that gets saved by an activity when -it is informed that it might go away.</p> - -<p>For sharing complex persistent user-defined objects, the -following approaches are recommended: -<ul> - <li>Application Preferences</li> - <li>Files</li> - <li>contentProviders</li> - <li>SQLite DB</li> -</ul> -</p> - -<p>If the shared data needs to be retained across points where the application -process can be killed, then place that data in persistent storage like -Application Preferences, SQLite DB, Files or ContentProviders. Please refer to -the <a href="{@docRoot}guide/topics/data/data-storage.html">Data Storage</a> -for further details on how to use these components.</p> - - -<!-- ------------------------------------------------------------------ --> - -<a name="4" id="4"></a> - -<h2>How can I check if an Activity is already running before starting -it?</h2> - -<p>The general mechanism to start a new activity if its not running— -or to bring the activity stack to the front if is already running in the -background— is the to use the NEW_TASK_LAUNCH flag in the startActivity() -call.</p> - -<!-- ------------------------------------------------------------------ --> - -<a name="5" id="5"></a> - -<h2>If an Activity starts a remote service, is there any way for the -Service to pass a message back to the Activity?</h2> - -<p>The remote service can define a callback interface and register it with the -clients to callback into the clients. The -{@link android.os.RemoteCallbackList RemoteCallbackList} class provides methods to -register and unregister clients with the service, and send and receive -messages.</p> - -<p>The sample code for remote service callbacks is given in <a -href="{@docRoot}guide/samples/ApiDemos/src/com/example/android/apis/app/RemoteService.html">ApiDemos/RemoteService</a></p> - -<!-- ------------------------------------------------------------------ --> - -<a name="6" id="6"></a> - -<h2>How to avoid getting the Application not responding dialog?</h2> - -<p>Please read the <a href="{@docRoot}guide/practices/design/responsiveness.html">Designing for Responsiveness</a> -document.</p> - - -<!-- ------------------------------------------------------------------ --> - -<a name="7" id="7"></a> - -<h2>How does an application know if a package is added or removed? -</h2> - -<p>Whenever a package is added, an intent with PACKAGE_ADDED action -is broadcast by the system. Similarly when a package is removed, an -intent with PACKAGE_REMOVED action is broadcast. To receive these -intents, you should write something like this: -<pre> - <receiver android:name ="com.android.samples.app.PackageReceiver"> - <intent-filter> - <action android:name="android.intent.action.PACKAGE_ADDED"/> - <action android:name="android.intent.action.PACKAGE_REMOVED"/> - - <data android:scheme="package" /> - </intent-filter> - </receiver> - </pre> - <br> -Here PackageReceiver is a BroadcastReceiver class.Its onReceive() -method is invoked, every time an application package is installed or -removed. - -</p> - -<!-- ------------------------------------------------------------------ --> - |