#java #android #dagger-2 #android-lifecycle #android-context
#java #Android #кинжал-2 #android-жизненный цикл #android-context
Вопрос:
У меня есть приложение для Android
@HiltAndroidApp
class MyApp extends Application {
static MyApp app;
static MyApp getApp() {
return app;
}
@Override
public void onCreate() {
super.onCreate();
app = this;
}
}
и я пытаюсь использовать его внутри класса
class AppStateUsingClass {
public void mymethod() {
MyApp app = MyApp.getApp();
//use app
}
}
Теперь я могу получить доступ к приложению, в котором у меня нет контекста, но я не уверен, правильно ли это.
Я понимаю, что жизненный цикл приложения проходит через запуск и остановку приложения, поэтому он живет как одноэлементный, поэтому все должно быть хорошо, но не уверен.
Нет ли более простого и чистого API для доступа к приложению, у меня есть состояние приложения в классе MyApp, к которому я хотел бы получить доступ там, где контекст отсутствует?
Любые предложения приветствуются?
Комментарии:
1. Что вам нужно сделать? В чем проблема использования ApplicationContext ? Кроме того, никогда не рассчитывайте на static в Android, приложение может быть уничтожено (для этого контекста нет onDestroy). Никогда не помещайте контекст в статический.
2. Я пытаюсь получить приложение внутри класса, где контекст недоступен. добавлен рассматриваемый класс для иллюстрации
Ответ №1:
То, что вы делаете, является довольно распространенным шаблоном и на самом деле не должно вызывать проблем.
Класс приложения можно рассматривать как одноэлементный, который активен до тех пор, пока какая-либо часть вашего приложения активна.
В документах конкретно указано, что этот класс используется для хранения состояния приложения.
Однако, в зависимости от вашего фактического дизайна, вида информации о состоянии, которую вы хотите сохранить, и где вы хотите получить к ней доступ, вы можете создать свой собственный синглтон, независимый от класса приложения, и использовать его.
Или вы можете инициализировать свой AppStateUsingClass
объект состояния, переданный в конструкторе.
Это дизайнерское решение, и если вы хотите получить больше мнений по нему, создайте рабочий пример кода и опубликуйте его на https://codereview.stackexchange.com