58

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

我还有一个BroadcastReceiver监听和接收 C2DM 消息的设备。当此接收器在应用程序未运行时收到消息时,它将触发一个对话框,显示即将到来的消息,并将启动我的应用程序的 Activity。

我的问题是,当我在没有任何交互的情况下启动Activity 时,会因为该应用程序的 Activity 启动而调用DefaultApplicationDefaultApplication的Activity 吗?onCreate()

以下是 my 的定义和清单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>
4

3 回答 3

47

只有第一次。

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

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

于 2011-10-07T11:26:15.360 回答
35

onCreate当被调用时,您可以在此处找到官方答案。

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

于 2011-10-07T11:20:35.180 回答
16

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

例如,请参阅Android Application 类方法 onCreate 被多次调用

于 2015-02-13T11:01:42.450 回答