什么时候Application的onCreate()方法被调用?

在我的Android应用程序中,我有一个DefaultApplication类,它扩展了android.app.Application ,并且在onCreate()绑定了一些服务,这些服务将被我的其他活动在这个应用程序中使用。

另外我有一个BroadcastReceiver监听和接收C2DM消息。 当这个接收器在应用程序没有运行的时候收到一个消息,它会触发一个显示即将到来的消息的对话框,它将启动我的应用程序的一个Activity。

我的问题是,当我开始一个没有与DefaultApplication交互的活动时,我的DefaultApplicationonCreate()会被调用,因为该应用程序的Activity已经启动了?

这里是我的DefaultApplication的定义和清单:

 public class DefaultApplication extends Application { @Override public void onCreate() { super.onCreate(); doBindService(); } void doBindService() { // Establish a connection with the service. We use an explicit // class name because we want a specific service implementation that // we know will be running in our own process (and thus won't be // supporting component replacement by other applications). bindService(new Intent(DefaultApplication.this, SocketService.class), socketServiceConnection, Context.BIND_AUTO_CREATE); mIsBound = true; } void doUnbindService() { if (mIsBound) { // Detach our existing connection. unbindService(socketServiceConnection); mIsBound = false; } } } 

清单看起来像这样:

 <application android:icon="@drawable/icon" android:label="@string/app_name" android:name="com.mypackage.DefaultApplication" android:theme="@android:style/Theme.NoTitleBar.Fullscreen" android:debuggable="true"> <service android:name="com.mypackage.services.SocketService"></service> <activity android:name="TestActivity" android:screenOrientation="landscape"></activity> </application> 

只有第一次。

当Activity启动并且应用程序没有被加载的时候,两个onCreate()方法都会被调用。

但是对于Activity的后续启动,应用程序的onCreate()将不会被调用。

onCreate 在这里被调用时,你可以find一个正式的答案。

在应用程序启动时,在任何活动,服务或接收者对象(不包括内容提供者)已创build之前调用。 实现应尽可能快(例如,使用状态的延迟初始化),因为在此函数中花费的时间直接影响启动进程中第一个活动,服务或接收者的性能。 如果你重写这个方法,一定要调用super.onCreate()。

请注意,如果任何服务被定义为在其他进程中运行,例如使用android:process=那么应用程序的onCreate()将再次调用该进程。

例如请参阅多次调用Android应用程序的类方法onCreate