19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2006 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.app; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 19c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackbornimport java.util.ArrayList; 20c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.ComponentCallbacks; 22c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackbornimport android.content.ComponentCallbacks2; 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.Context; 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.ContextWrapper; 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.res.Configuration; 26c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackbornimport android.os.Bundle; 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Base class for those who need to maintain global application state. You can 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * provide your own implementation by specifying its name in your 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * AndroidManifest.xml's <application> tag, which will cause that class 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to be instantiated for you when the process for your application/package is 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * created. 347025d8e4b96f14a92f9bb20902732f43d1c93e7bDianne Hackborn * 357025d8e4b96f14a92f9bb20902732f43d1c93e7bDianne Hackborn * <p class="note">There is normally no need to subclass Application. In 367025d8e4b96f14a92f9bb20902732f43d1c93e7bDianne Hackborn * most situation, static singletons can provide the same functionality in a 377025d8e4b96f14a92f9bb20902732f43d1c93e7bDianne Hackborn * more modular way. If your singleton needs a global context (for example 387025d8e4b96f14a92f9bb20902732f43d1c93e7bDianne Hackborn * to register broadcast receivers), the function to retrieve it can be 397025d8e4b96f14a92f9bb20902732f43d1c93e7bDianne Hackborn * given a {@link android.content.Context} which internally uses 407025d8e4b96f14a92f9bb20902732f43d1c93e7bDianne Hackborn * {@link android.content.Context#getApplicationContext() Context.getApplicationContext()} 417025d8e4b96f14a92f9bb20902732f43d1c93e7bDianne Hackborn * when first constructing the singleton.</p> 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 43c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackbornpublic class Application extends ContextWrapper implements ComponentCallbacks2 { 44c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn private ArrayList<ComponentCallbacks> mComponentCallbacks = 45c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn new ArrayList<ComponentCallbacks>(); 46c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn private ArrayList<ActivityLifecycleCallbacks> mActivityLifecycleCallbacks = 47c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn new ArrayList<ActivityLifecycleCallbacks>(); 48c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn 495fd2169eabd77e6bfafaf456e58051a3bafb2bcaDianne Hackborn /** @hide */ 505fd2169eabd77e6bfafaf456e58051a3bafb2bcaDianne Hackborn public LoadedApk mLoadedApk; 51c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn 52c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn public interface ActivityLifecycleCallbacks { 53c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn void onActivityCreated(Activity activity, Bundle savedInstanceState); 54c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn void onActivityStarted(Activity activity); 55c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn void onActivityResumed(Activity activity); 56c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn void onActivityPaused(Activity activity); 57c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn void onActivityStopped(Activity activity); 58c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn void onActivitySaveInstanceState(Activity activity, Bundle outState); 59c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn void onActivityDestroyed(Activity activity); 60c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn } 61c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Application() { 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super(null); 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 678e61185918b9b4ef8de6ecffb0d77afaeb336abdJacob Nordfalk * Called when the application is starting, before any activity, service, 688e61185918b9b4ef8de6ecffb0d77afaeb336abdJacob Nordfalk * or receiver objects (excluding content providers) have been created. 698e61185918b9b4ef8de6ecffb0d77afaeb336abdJacob Nordfalk * Implementations should be as quick as possible (for example using 708e61185918b9b4ef8de6ecffb0d77afaeb336abdJacob Nordfalk * lazy initialization of state) since the time spent in this function 718e61185918b9b4ef8de6ecffb0d77afaeb336abdJacob Nordfalk * directly impacts the performance of starting the first activity, 728e61185918b9b4ef8de6ecffb0d77afaeb336abdJacob Nordfalk * service, or receiver in a process. 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * If you override this method, be sure to call super.onCreate(). 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void onCreate() { 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 797025d8e4b96f14a92f9bb20902732f43d1c93e7bDianne Hackborn * This method is for use in emulated process environments. It will 807025d8e4b96f14a92f9bb20902732f43d1c93e7bDianne Hackborn * never be called on a production Android device, where processes are 817025d8e4b96f14a92f9bb20902732f43d1c93e7bDianne Hackborn * removed by simply killing them; no user code (including this callback) 827025d8e4b96f14a92f9bb20902732f43d1c93e7bDianne Hackborn * is executed when doing so. 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void onTerminate() { 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 86c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void onConfigurationChanged(Configuration newConfig) { 88c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn Object[] callbacks = collectComponentCallbacks(); 89c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn if (callbacks != null) { 90c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn for (int i=0; i<callbacks.length; i++) { 91c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn ((ComponentCallbacks)callbacks[i]).onConfigurationChanged(newConfig); 92c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn } 93c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn } 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 95c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void onLowMemory() { 97c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn Object[] callbacks = collectComponentCallbacks(); 98c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn if (callbacks != null) { 99c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn for (int i=0; i<callbacks.length; i++) { 100c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn ((ComponentCallbacks)callbacks[i]).onLowMemory(); 101c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn } 102c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn } 103c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn } 104c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn 105c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn public void onTrimMemory(int level) { 106c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn Object[] callbacks = collectComponentCallbacks(); 107c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn if (callbacks != null) { 108c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn for (int i=0; i<callbacks.length; i++) { 109c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn Object c = callbacks[i]; 110c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn if (c instanceof ComponentCallbacks2) { 111c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn ((ComponentCallbacks2)c).onTrimMemory(level); 112c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn } 113c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn } 114c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn } 115c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn } 116c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn 117c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn public void registerComponentCallbacks(ComponentCallbacks callback) { 118c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn synchronized (mComponentCallbacks) { 119c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn mComponentCallbacks.add(callback); 120c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn } 121c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn } 122c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn 123c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn public void unregisterComponentCallbacks(ComponentCallbacks callback) { 124c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn synchronized (mComponentCallbacks) { 125c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn mComponentCallbacks.remove(callback); 126c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn } 127c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn } 128c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn 129c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn public void registerActivityLifecycleCallbacks(ActivityLifecycleCallbacks callback) { 130c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn synchronized (mActivityLifecycleCallbacks) { 131c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn mActivityLifecycleCallbacks.add(callback); 132c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn } 133c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn } 134c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn 135c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn public void unregisterActivityLifecycleCallbacks(ActivityLifecycleCallbacks callback) { 136c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn synchronized (mActivityLifecycleCallbacks) { 137c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn mActivityLifecycleCallbacks.remove(callback); 138c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn } 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // ------------------ Internal API ------------------ 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @hide 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* package */ final void attach(Context context) { 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project attachBaseContext(context); 1485fd2169eabd77e6bfafaf456e58051a3bafb2bcaDianne Hackborn mLoadedApk = ContextImpl.getImpl(context).mPackageInfo; 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 150c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn 151c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn /* package */ void dispatchActivityCreated(Activity activity, Bundle savedInstanceState) { 152c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn Object[] callbacks = collectActivityLifecycleCallbacks(); 153c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn if (callbacks != null) { 154c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn for (int i=0; i<callbacks.length; i++) { 155c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn ((ActivityLifecycleCallbacks)callbacks[i]).onActivityCreated(activity, 156c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn savedInstanceState); 157c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn } 158c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn } 159c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn } 160c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn 161c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn /* package */ void dispatchActivityStarted(Activity activity) { 162c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn Object[] callbacks = collectActivityLifecycleCallbacks(); 163c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn if (callbacks != null) { 164c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn for (int i=0; i<callbacks.length; i++) { 165c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn ((ActivityLifecycleCallbacks)callbacks[i]).onActivityStarted(activity); 166c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn } 167c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn } 168c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn } 169c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn 170c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn /* package */ void dispatchActivityResumed(Activity activity) { 171c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn Object[] callbacks = collectActivityLifecycleCallbacks(); 172c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn if (callbacks != null) { 173c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn for (int i=0; i<callbacks.length; i++) { 174c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn ((ActivityLifecycleCallbacks)callbacks[i]).onActivityResumed(activity); 175c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn } 176c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn } 177c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn } 178c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn 179c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn /* package */ void dispatchActivityPaused(Activity activity) { 180c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn Object[] callbacks = collectActivityLifecycleCallbacks(); 181c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn if (callbacks != null) { 182c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn for (int i=0; i<callbacks.length; i++) { 183c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn ((ActivityLifecycleCallbacks)callbacks[i]).onActivityPaused(activity); 184c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn } 185c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn } 186c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn } 187c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn 188c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn /* package */ void dispatchActivityStopped(Activity activity) { 189c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn Object[] callbacks = collectActivityLifecycleCallbacks(); 190c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn if (callbacks != null) { 191c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn for (int i=0; i<callbacks.length; i++) { 192c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn ((ActivityLifecycleCallbacks)callbacks[i]).onActivityStopped(activity); 193c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn } 194c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn } 195c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn } 196c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn 197c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn /* package */ void dispatchActivitySaveInstanceState(Activity activity, Bundle outState) { 198c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn Object[] callbacks = collectActivityLifecycleCallbacks(); 199c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn if (callbacks != null) { 200c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn for (int i=0; i<callbacks.length; i++) { 201c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn ((ActivityLifecycleCallbacks)callbacks[i]).onActivitySaveInstanceState(activity, 202c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn outState); 203c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn } 204c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn } 205c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn } 206c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn 207c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn /* package */ void dispatchActivityDestroyed(Activity activity) { 208c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn Object[] callbacks = collectActivityLifecycleCallbacks(); 209c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn if (callbacks != null) { 210c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn for (int i=0; i<callbacks.length; i++) { 211c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn ((ActivityLifecycleCallbacks)callbacks[i]).onActivityDestroyed(activity); 212c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn } 213c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn } 214c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn } 215c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn 216c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn private Object[] collectComponentCallbacks() { 217c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn Object[] callbacks = null; 218c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn synchronized (mComponentCallbacks) { 219c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn if (mComponentCallbacks.size() > 0) { 220c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn callbacks = mComponentCallbacks.toArray(); 221c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn } 222c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn } 223c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn return callbacks; 224c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn } 225c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn 226c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn private Object[] collectActivityLifecycleCallbacks() { 227c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn Object[] callbacks = null; 228c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn synchronized (mActivityLifecycleCallbacks) { 229c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn if (mActivityLifecycleCallbacks.size() > 0) { 230c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn callbacks = mActivityLifecycleCallbacks.toArray(); 231c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn } 232c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn } 233c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn return callbacks; 234c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn } 2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 236