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

Как получить AssetManager без ссылки на контекст?

У меня есть класс, который должен получить ссылку на это приложение AssetManager. Этот класс не расширяет какой-либо тип пользовательского интерфейса Android, поэтому он не имеет метода getContext() или чего-то подобного. Существует ли какой-то статический тип метода Context.getCurrentApplicationContext()?

Чтобы уточнить: мой класс предназначен для использования как библиотека для других приложений. Он не связан с AndroidManifest.xml или не управляет контекстом, который его вызывает.

4b9b3361

Ответ 1

  • Создайте подкласс Application, например public class App extends Application {
  • Установите атрибут android:name тэга <application> в AndroidManifest.xml, чтобы указать на ваш новый класс, например. android:name=".App"
  • В методе onCreate() вашего экземпляра приложения сохраните свой контекст (например, this) в статическом поле с именем app и создайте статический метод, который возвращает это поле, например. getApp():

Вот как это должно выглядеть:

public class App extends Application{

    private static Context mContext;

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

    public static Context getContext(){
        return mContext;
    }
}

Теперь вы можете использовать: App.getContext() всякий раз, когда хотите получить контекст, а затем getAssetManager() (или App.getContext().getAssetManager()).

Ответ 2

Я не уверен в лучшем ответе на вопрос OP. Тем не менее, я знаю, что вы должны быть очень осторожны при использовании статического контекста, как предлагается в ресурсы разработчика Android:

В методе onCreate() вашего экземпляра приложения сохраните свой контекст (например, это) в статическом поле с именем app и создайте статический метод, который возвращает это поле, например. getApp():

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