深入淺出API——Applicaiton源碼分析

來源:互聯網
上載者:User

標籤:des   android   http   io   os   ar   java   for   sp   

/* * Copyright (C) 2006 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * *      http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "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 application state. You can * provide your own implementation by specifying its name in your * AndroidManifest.xml's <application> tag, which will cause that class * to be instantiated for you 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 way.  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 =            new ArrayList<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 is starting, before any other application     * objects have been created.  Implementations should be 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 process.     * If you override this method, be sure to call super.onCreate().     */    public void onCreate() {    }    /**     * This method is for use in emulated process environments.  It will     * never be called on a production Android device, where processes are     * removed by simply killing them; no user code (including this callback)     * is executed when doing so.     */    public void onTerminate() {    }    public void onConfigurationChanged(Configuration newConfig) {        Object[] callbacks = collectComponentCallbacks();        if (callbacks != null) {            for (int i=0; i<callbacks.length; i++) {                ((ComponentCallbacks)callbacks[i]).onConfigurationChanged(newConfig);            }        }    }    public void onLowMemory() {        Object[] callbacks = collectComponentCallbacks();        if (callbacks != null) {            for (int i=0; i<callbacks.length; i++) {                ((ComponentCallbacks)callbacks[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 (mActivityLifecycleCallbacks) {            mActivityLifecycleCallbacks.add(callback);        }    }    public void unregisterActivityLifecycleCallbacks(ActivityLifecycleCallbacks callback) {        synchronized (mActivityLifecycleCallbacks) {            mActivityLifecycleCallbacks.remove(callback);        }    }        // ------------------ Internal API ------------------        /**     * @hide     */    /* package */ final void 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++) {                ((ActivityLifecycleCallbacks)callbacks[i]).onActivityCreated(activity,                        savedInstanceState);            }        }    }    /* package */ void dispatchActivityStarted(Activity activity) {        Object[] callbacks = collectActivityLifecycleCallbacks();        if (callbacks != null) {            for (int i=0; i<callbacks.length; i++) {                ((ActivityLifecycleCallbacks)callbacks[i]).onActivityStarted(activity);            }        }    }    /* package */ void dispatchActivityResumed(Activity activity) {        Object[] callbacks = collectActivityLifecycleCallbacks();        if (callbacks != null) {            for (int i=0; i<callbacks.length; i++) {                ((ActivityLifecycleCallbacks)callbacks[i]).onActivityResumed(activity);            }        }    }    /* package */ void dispatchActivityPaused(Activity activity) {        Object[] callbacks = collectActivityLifecycleCallbacks();        if (callbacks != null) {            for (int i=0; i<callbacks.length; i++) {                ((ActivityLifecycleCallbacks)callbacks[i]).onActivityPaused(activity);            }        }    }    /* package */ void dispatchActivityStopped(Activity activity) {        Object[] callbacks = collectActivityLifecycleCallbacks();        if (callbacks != null) {            for (int i=0; i<callbacks.length; i++) {                ((ActivityLifecycleCallbacks)callbacks[i]).onActivityStopped(activity);            }        }    }    /* package */ void dispatchActivitySaveInstanceState(Activity activity, Bundle outState) {        Object[] callbacks = collectActivityLifecycleCallbacks();        if (callbacks != null) {            for (int i=0; i<callbacks.length; i++) {                ((ActivityLifecycleCallbacks)callbacks[i]).onActivitySaveInstanceState(activity,                        outState);            }        }    }    /* package */ void dispatchActivityDestroyed(Activity activity) {        Object[] callbacks = collectActivityLifecycleCallbacks();        if (callbacks != null) {            for (int i=0; i<callbacks.length; i++) {                ((ActivityLifecycleCallbacks)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) {                callbacks = mActivityLifecycleCallbacks.toArray();            }        }        return callbacks;    }}

深入淺出API——Applicaiton源碼分析

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.