/* Copyright (C) 2006 the Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License") ; * You are not a use this file except in compliance with the License. * Obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * unless required by appli Cable law or agreed into writing, software * Distributed under the License is distributed on a "as is" BASIS, * without Warranties or CONDITIONS of any KIND, either express OR implied. * See the License for the specific language governing permissions and * limitations under the License. */package Android.app;import Java.util.arraylist;import Android.content.componentcallbacks;import Android.content.componentcallbacks2;import Android.content.context;import Android.content.contextwrapper;import Android.content.res.configuration;import android.os.bundle;/** * Base class for those who need to maintain global applicat Ion state. You can * provide your own implementation by SpecifyinG its name in your * androidmanifest.xml ' s <application> tag, which would cause that class * to being instantiated for Y OU when the process for your application/package is * created. * * <p class= "Note" >there is normally no need to subclass application. In * Most situation, static singletons can provide the same functionality in a * more modular the. If your singleton needs a global context (for example * to register broadcast receivers), the function to retrieve it can Be * Given a {@link Android.content.Context} which internally uses * {@link android.content.context#getapplicationcontext () Context.getapplicationcontext ()} * When first constructing the Singleton.</p> */public class application extends Contextwrapper implements COMPONENTCALLBACKS2 {private arraylist<componentcallbacks> mcomponentcallbacks = New Arraylist<componentcallbacks> (); Private arraylist<activitylifecyclecallbacks> mactivitylifecyclecallbacks = newArraylist<activitylifecyclecallbacks> (); /** @hide * * Public loadedapk mloadedapk; public interface Activitylifecyclecallbacks {void onactivitycreated (activity activity, Bundle savedinstancestate); void onactivitystarted (activity activity); void onactivityresumed (activity activity); void onactivitypaused (activity activity); void onactivitystopped (activity activity); void Onactivitysaveinstancestate (activity activity, Bundle outstate); void onactivitydestroyed (activity activity); } public Application () {super (NULL); }/** * Called when the application are starting, before any other application * objects has been created. Implementations should is as quick as * possible (for example using lazy initialization of state) since the time * Spent in this function directly impacts the performance of starting the * first activity, service, or receiver in a P Rocess. * If you override this method, being sure to call Super.oncreate (). */public void OnCreate () {}/** * This method was for use in emulated process environments. It'll * never is called on a production Android device, where processes is * removed by simply killing them; No user code (including this callback) * was executed when doing so. */public void Onterminate () {} public void onconfigurationchanged (Configuration newconfig) {object[] ca Llbacks = Collectcomponentcallbacks (); if (callbacks! = null) {for (int i=0; i<callbacks.length; i++) {(componentcallbacks) Callba Cks[i]). onconfigurationchanged (Newconfig); }}} public void Onlowmemory () {object[] callbacks = Collectcomponentcallbacks (); if (callbacks! = null) {for (int i=0; i<callbacks.length; i++) {(componentcallbacks) Callba Cks[i]). Onlowmemory (); }}} public void OntrimmeMory (int level) {object[] callbacks = Collectcomponentcallbacks (); if (callbacks! = null) {for (int i=0; i<callbacks.length; i++) {Object c = callbacks[i]; if (c instanceof ComponentCallbacks2) {((COMPONENTCALLBACKS2) c). Ontrimmemory (level); }}}} public void Registercomponentcallbacks (Componentcallbacks callback) { Synchronized (mcomponentcallbacks) {Mcomponentcallbacks.add (callback); }} public void Unregistercomponentcallbacks (Componentcallbacks callback) {synchronized (mcomponentcallbacks ) {Mcomponentcallbacks.remove (callback); }} public void Registeractivitylifecyclecallbacks (Activitylifecyclecallbacks callback) {synchronized (macti Vitylifecyclecallbacks) {Mactivitylifecyclecallbacks.add (callback); }} public void Unregisteractivitylifecyclecallbacks (activitylifecyClecallbacks callback) {synchronized (mactivitylifecyclecallbacks) {Mactivitylifecyclecallbacks.remove (callback); }}//------------------Internal API------------------/** * @hide */* Package */FINAL V OID Attach (Context context) {Attachbasecontext (context); mloadedapk = Contextimpl.getimpl (context). Mpackageinfo; }/* Package */void dispatchactivitycreated (activity activity, Bundle savedinstancestate) {object[] Callbacks = Collectactivitylifecyclecallbacks (); if (callbacks! = null) {for (int i=0; i<callbacks.length; i++) {(activitylifecyclecallback s) (Callbacks[i]). onactivitycreated (activity, savedinstancestate); }}}/* package */void dispatchactivitystarted (activity activity) {object[] callbacks = Collectacti Vitylifecyclecallbacks (); if (callbacks! = null) {for (int i=0; I<CALLBACKs.length; i++) {((activitylifecyclecallbacks) callbacks[i]). onactivitystarted (activity); }}}/* package */void dispatchactivityresumed (activity activity) {object[] callbacks = Collectacti Vitylifecyclecallbacks (); if (callbacks! = null) {for (int i=0; i<callbacks.length; i++) {(activitylifecyclecallback s) (Callbacks[i]). onactivityresumed (activity); }}}/* package */void dispatchactivitypaused (activity activity) {object[] callbacks = Collectactiv Itylifecyclecallbacks (); if (callbacks! = null) {for (int i=0; i<callbacks.length; i++) {(activitylifecyclecallback s) (Callbacks[i]). onactivitypaused (activity); }}}/* package */void dispatchactivitystopped (activity activity) {object[] callbacks = Collectacti Vitylifecyclecallbacks (); if (callbacks! = null) {for (int i=0; i<callbacks.Length i++) {((activitylifecyclecallbacks) callbacks[i]). onactivitystopped (activity); }}}/* package */void dispatchactivitysaveinstancestate (activity activity, Bundle outstate) {objec T[] callbacks = Collectactivitylifecyclecallbacks (); if (callbacks! = null) {for (int i=0; i<callbacks.length; i++) {(activitylifecyclecallback s) (Callbacks[i]). Onactivitysaveinstancestate (activity, outstate); }}}/* package */void dispatchactivitydestroyed (activity activity) {object[] callbacks = Collectac Tivitylifecyclecallbacks (); if (callbacks! = null) {for (int i=0; i<callbacks.length; i++) {(activitylifecyclecallback s) (Callbacks[i]). onactivitydestroyed (activity); }}} private object[] Collectcomponentcallbacks () {object[] callbacks = null; Synchronized (mcomponentcallbacks) { if (mcomponentcallbacks.size () > 0) {callbacks = Mcomponentcallbacks.toarray (); }} return callbacks; } private object[] Collectactivitylifecyclecallbacks () {object[] callbacks = null; Synchronized (mactivitylifecyclecallbacks) {if (mactivitylifecyclecallbacks.size () > 0) {CA Llbacks = Mactivitylifecyclecallbacks.toarray (); }} return callbacks; }}
Api--applicaiton source analysis in Layman's