Как получить AssetManager без ссылки на Context? - PullRequest
19 голосов
/ 10 декабря 2010

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

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

Ответы [ 2 ]

23 голосов
/ 10 декабря 2010
  1. Создать подкласс Application, например public class App extends Application {
  2. Установите атрибут android:name вашего тега <application> в AndroidManifest.xml, чтобы он указывал на ваш новый класс, например, android:name=".App"
  3. В методе 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()).

7 голосов
/ 27 декабря 2010

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...