2015-04-11 2 views
1

У меня есть следующий код:Достижение экземпляра сразу после вызова StartService

Class A extends Service{ 
    static instance = null; 
    onCreate(){ 
     instance = this; 
    } 

    public static createInstance(Context context){ 
     if(instance==null) 
     context.startService(new Intent(context, A.class)); 
     return instance; 
    } 

После первого вызова createInstance, он всегда возвращает нуль. Я называю это от конструктора основного вида деятельности. Как я могу заставить конструктор достичь экземпляра с самого первого вызова?

+0

Почему вы хотите начать сервис таким образом? –

+0

В случае, если вы имеете в виду startService - это единственный способ, который я знаю до сих пор. –

+1

@ Vitali Pom: просто используйте 'startService (новый Intent (context, A.class));' для запуска службы вместо вызова метода createInstance –

ответ

0

Принимая во внимание концепцию Services в Android, я уверен, что реализация startService() предусматривает асинхронные операции. Таким образом, к моменту startService() метод onCreate() может даже не вызываться системой. Вот почему createInstance() всегда возвращает null.

Вместо одноэлементного образца я настоятельно рекомендую использовать Services согласно official documentation.

0

Правильный способ запуска услуги - использовать намерение. В своей основной деятельности создайте намерение и вызовите this.startService с этим намерением.

Возможно, вы не должны хранить статический экземпляр чего-либо, не говоря уже о службе. Синглтон - это шаблон, который следует опасаться в Android, потому что ваш контекст приложения убивается и воссоздается ОС, поэтому нет никакого способа узнать, неподвижно ли это статическое поле или нет.

+0

Я не погрузился во все детали моих реализаций. Это еще одна статическая переменная, которую я запускаю в onCreate, и она не запускается в указанной точке. Что касается вашего предложения, я создаю намерение: новый Intent (контекст, A.class) (см. Вызов startService). Неважно, с чего я его создаю? –

+0

Да, вы должны создать, если из действия и не полагаться на одноэлементный шаблон. –

+0

Итак, в грязной реализации - если я получаю свое намерение от основной деятельности и использую его здесь, он должен работать? –

Смежные вопросы