Могу ли я запустить службу из Application # onCreate ()? - PullRequest
15 голосов
/ 26 августа 2011

Я хочу запустить службу, когда мое приложение инициализируется из какого-либо компонента.

public class MyApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        startService(new Intent(getApplicationContext(), MyService.class)); 
    }
}

Сервис доступен в состоянии onCreate()? Будет ли super.onCreate() инициализировать все компоненты приложения, зарегистрированного в AndroidManifest.xml?

Я могу запустить этот код в своей галактике, но не могу гарантировать, что он будет работать на всех устройствах и платформах, я не могу найти документацию по инициализации приложения Android.

Ответы [ 2 ]

9 голосов
/ 26 августа 2011

Да, вы можете запустить службу в onCreate() так, как вы это делаете.Однако нет гарантии, что служба будет успешно запущена - пока служба существует на устройстве и может работать, она будет работать.super.onCreate() не выполняет никаких подготовительных действий, необходимых для запуска службы из вашего приложения.Что вы подразумеваете под "Доступна ли служба в состоянии onCreate ()"?

1 голос
/ 26 августа 2011

Короче говоря, Да, Context.startService () , но документ также говорит, что если он возвращает ноль, служба недоступна.

Если служба запущена или уже запущена, ComponentName фактической службы, которая была запущена, возвращается; еще если служба не существует, возвращается ноль

Этот API-интерфейс не предназначен для разных устройств, поэтому вы можете быть уверены в том, что вы испытываете на эмуляторе, и на ваших устройствах. Следует помнить, что службы, которым требуется «много» ресурсов, могут работать по-разному, например, время процессора или память и т. Д.

...