应用程序的onCreate()方法何时被调用?

66
在我的Android应用程序中,我有一个DefaultApplication类,它扩展了android.app.Application,并且在其onCreate()中绑定了一些服务,这些服务将被该应用程序中的其他活动使用。
我还有一个BroadcastReceiver,它监听和接收C2DM消息。当该接收器在应用程序未运行时接收到消息时,它将触发显示即将到来的消息的对话框,并启动我的应用程序的Activity。
我的问题是,在没有与DefaultApplication进行任何交互的情况下启动一个活动时,因为该应用程序的活动已启动,是否会调用DefaultApplicationonCreate()
以下是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>

1
是的,它有效,我没有看到其他的... - atasoyh
我不明白为什么你要扩展Application?难道不应该扩展Activity吗? - Caner
在我的DefaultApplication的其余部分中,我存储了一些数据并定义了一些在整个应用程序中使用的方法。我只复制了其中的一部分到这里。 - Yasin YILDIRIM
3个回答

50

仅在第一次。

当启动Activity时,如果应用程序没有加载,则会调用两个onCreate()方法。

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


在我的情况下,应用程序类的onCreate方法仅在我将应用程序安装到移动设备上时被调用,当我杀死应用程序并重新启动它时,并不会每次都被调用。 - Shubham Mogarkar

36

当调用onCreate时,您可以在这里找到官方答案。

应用程序启动时调用,在创建任何活动、服务或接收器对象(不包括内容提供程序)之前。实现应尽快完成(例如使用状态的惰性初始化),因为在此函数中花费的时间直接影响启动进程中第一个活动、服务或接收器的性能。如果您重写此方法,请确保调用super.onCreate()。


20

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接