Android Как внедрить приложение в класс, где контекста нет?

#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