Подтвердить что ты не робот

Как получить контекст из любого места?

В Android есть ли способ получить контекст приложения статическим способом? Например, чтобы извлечь его из фонового потока.

Спасибо

4b9b3361

Ответ 1

Самый простой (и правильный) способ:

Определите новый класс

public class MyApp extends Application {
    private static MyApp instance;

    public static MyApp getInstance() {
        return instance;
    }

    public static Context getContext(){
        return instance;
        // or return instance.getApplicationContext();
    }

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

Затем в манифесте вам нужно добавить этот класс в поле "Имя" на вкладке "Приложение". Или отредактируйте xml и поместите

<application
    android:name="com.example.app.MyApp"
    android:icon="@drawable/icon"
    android:label="@string/app_name"
    .......
    <activity
        ......

а затем из любого места вы можете позвонить

MyApp.getContext();

Надеюсь, что это поможет

Ответ 2

В основном у вас есть 2 типа контекста - контекст активности и Контекст приложения.

Не нужно использовать только один Контекст для всего. Там проблемы, если вы используете один Контекст в каждом случае, вам нужен Контекст. Лучше следовать чему-то вроде этого: используйте контекст Activity внутри Activity и контекст приложения при передаче контекста за пределы действия Activity, что поможет вам избежать утечки памяти.

Если вы читаете эту статью, вы можете увидеть разницу между двумя Контекст.

Контекст приложения будет работать до тех пор, пока ваше приложение будет живым и не зависит от жизненного цикла деятельности. Если вы планируете сохраняя долгоживущие объекты, которые нуждаются в контексте, помните объект приложения.

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