Android getContext на фоне службы - PullRequest
       19

Android getContext на фоне службы

0 голосов
/ 18 сентября 2018

Я пытаюсь создать Сервис , который работает, даже когда мое приложение закрыто.Однако мне нужно использовать мое приложение Context внутри этой Service .Когда приложение работает, служба также работает, но когда я закрываю приложение (вызывался onDestroy ()), getContext() всегда возвращает null.

Служба

public class SubscribeService extends Service {

    private Context context;

    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        context = this; //Returns null when service is running on background
        context = MyApp.getContext(); //Also null
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        //do stuff using context
    }

MyApp

public class MyApp extends Application {

    private static Context context;

    public static Context getContext() {
        return context.getApplicationContext();
    }

    @Override
    public void onCreate() {
        context = getApplicationContext();
        super.onCreate();
    }
}

Запуск службы с Activity onCreate ()

startService(new Intent(this, SubscribeService.class));

Как использовать Контекст в этом сценарии?

Редактировать

Удалось заставить его работать должным образом после помощи Onik .Мне просто нужно было позвонить на MyApp.getContext(); до super.onCreate(); Вот так:

@Override
public void onCreate() {
    context = MyApp.getContext();
    super.onCreate();
}

Ответы [ 3 ]

0 голосов
/ 18 сентября 2018

уже однажды оставил ответ , который должен был использовать getApplicationContext() в Service.

, также используя IntentService с Context.startService(Intent)здесь имеет смысл.

... и не вставляйте операторы перед вызовом super.onCreate().

0 голосов
/ 18 сентября 2018

Попробуйте это:

Добавлено super.onCreate(); до MyApp.context = getApplicationContext();

public class MyApp extends Application {

    private static Context context;

    public void onCreate() {
        super.onCreate();
        MyApp.context = getApplicationContext();
    }

    public static Context getAppContext() {
        return MyApp.context;
    }
}

Редактировать: Вызов MyApp.getAppContext() вернетприложение Context.

0 голосов
/ 18 сентября 2018

Сервис расширяет Контекст .Вы можете использовать this, где this - это ссылка на экземпляр Service.

Более подробная информация в моем комментарии ниже касается следующего кода SubscribeService class:

@Override
public void onCreate() {
    super.onCreate();
    context = this;
    context = MyApp.getContext();
}

В вашей Service onCreate() context = this не может быть null фундаментальной парадигмой программирования.С другой стороны, context = MyApp.getContext() может быть null, но, скорее всего, из-за этой строки кода, расположенной после super.onCreate() в MyApp class:

@Override
public void onCreate() {
    context = getApplicationContext();
    super.onCreate();
}

Заменить порядок последнегодве строки.

...