Как получить AssetManager без ссылки на контекст?
У меня есть класс, который должен получить ссылку на это приложение AssetManager
. Этот класс не расширяет какой-либо тип пользовательского интерфейса Android, поэтому он не имеет метода getContext()
или чего-то подобного. Существует ли какой-то статический тип метода Context.getCurrentApplicationContext()
?
Чтобы уточнить: мой класс предназначен для использования как библиотека для других приложений. Он не связан с AndroidManifest.xml
или не управляет контекстом, который его вызывает.
Ответы
Ответ 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()
:
Использование статических контекстов может просачиваться в пропущенные проблемы с памятью, особенно если статический контекст используется для ссылок на представления.