Когда вызывается метод Application onCreate ()? - PullRequest
51 голосов
/ 07 октября 2011

В моем приложении для Android у меня есть класс DefaultApplication, который расширяет android.app.Application, а в его onCreate() я связываю некоторые службы, которые будут использоваться моими другими действиями в этом приложении.

ТакжеУ меня есть BroadcastReceiver, который слушает и получает сообщения C2DM.Когда этот получатель получает сообщение, когда приложение не запущено, он запускает диалоговое окно, в котором отображается предстоящее сообщение, и запускает Активность моего приложения.

У меня вопрос, когда я запускаю действие без каких-либопри взаимодействии с DefaultApplication, будут ли вызваны мои DefaultApplication onCreate(), потому что началась активность этого приложения?

Вот определение и Манифест моего 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>

Ответы [ 3 ]

42 голосов
/ 07 октября 2011

Только в первый раз.

Когда Activity запускается и приложение не загружается, тогда будут вызываться оба метода onCreate().

Но для последующих запусков Деятельности приложение onCreate() не будет вызываться.

32 голосов
/ 07 октября 2011

Вы можете найти официальный ответ, когда onCreate называется здесь .

Вызывается, когда приложение запускается перед любой активностью, обслуживанием, или объекты получателя (исключая поставщиков контента) были созданы. Реализации должны быть максимально быстрыми (например, с использованием Lazy инициализация состояния), так как время, проведенное в этой функции непосредственно влияет на производительность запуска первого действия, служба или получатель в процессе. Если вы переопределите этот метод, Обязательно вызовите super.onCreate ().

13 голосов
/ 13 февраля 2015

Обратите внимание, что если какой-либо сервис определен для запуска в другом процессе, например, с android:process= тогда для этого процесса снова будет вызван onCreate() приложения.

Например, см. Метод класса Android-приложения onCreate, вызываемый несколько раз

...