Получение контекста приложения

Это может быть простой вопрос, но я просто хотел убедиться, что я прав.

В моем приложении Android у меня есть конструктор, который использует:

activity.getApplicationContext()

Активность передается в конструктор в качестве параметра.

Проблема в том, что я вызываю этот класс из службы. Если я создаю второй конструктор, который принимает Сервис как параметр и использует service.getApplicationContext? Я получу тот же контекст приложения?

Ответ 1

Я получу тот же контекст приложения?

Да. если вы можете проверить документ андроида, который они дали

 getApplicationContext()

Возвращает контекст единого глобального объекта приложения текущего процесса.

поэтому его нельзя изменять для всего процесса приложения.

Самое главное вы должны прочитать это

getApplicationContext() обычно следует использовать только в том случае, если вам нужен контекст, жизненный цикл которого отделен от текущего контекста, связанного с временем жизни процесса, а не с текущим компонентом.

исправьте меня, если я ошибаюсь.

Спасибо

Ответ 2

Самый простой способ получить контекст приложения:

Создайте класс App, который расширяет android.app.Application

public class App extends Application {
    public static Context context;

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

Измените тэг AndroidManifest.xml <application>, чтобы иметь атрибут android:name="your.package.name.App".

Каждый раз, когда вам нужен контекст приложения, просто получите его от App.context.

Application всегда сначала инициализируется, будет ли выполняться ваш процесс, будь то активность, услуга или что-то еще. Вы всегда будете иметь доступ к контексту приложения.

Ответ 3

Существует только один контекст приложения, поэтому вы должны получить тот же самый. У вас может быть только один конструктор, который принимает Context, вам не нужны два. Или, если вы хотите убедиться, что вы получаете контекст приложения, а не, скажем, один из видов деятельности, вы можете использовать свой конструктор Application как параметр, который является Context.

Ответ 4

Вы можете пойти для getApplicationContext(), если хотите получить контекст всего приложения. Если вы хотите получить контекст текущего класса, вы можете использовать getBaseContext() вместо этого.

Ответ 5

Я адаптировал ответ yuku с нестационарной прямой ссылкой на контекст.

Создайте класс domain.company.pseudo.ApplicationName, который расширяет android.app.Application.

package hypersoft.systems.android;

import android.app.Application;

public class Starbox extends Application {

  public static Starbox instance;

  @Override
  public void onCreate() {
    super.onCreate();
    instance = this;
  }

}

В этом примере мое полное имя пакета приложений hypersoft.systems.android.starbox.

Теперь измените тэг AndroidManifest.xml <application> на атрибут android:name="hypersoft.systems.android.Starbox" и убедитесь, что файл класса Starbox.java находится в каталоге компонента проекта: android чем starbox.

Со всем этим вы можете теперь import hypersoft.systems.android.Starbox, а в своем коде вы можете получить ApplicationContext, вызвав Starbox.instance.getApplicationContext()

Успешная компиляция с инструментами сборки 26 и api 26 (Android 8.0) с min sdk версии 14 (4.0).

Ответ 6

Контекст приложения add Activity Контекст как разные. Заключение рискованно. Используйте этот код для использования объекта контекста.

public class App extends Application {
public static Context context;

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

В ваших действиях и фрагментах Класс:

Conetext context=App.context;