Какова цель класса Applicaton в android

Какова цель класса Application. каковы преимущества его распространения в пользовательский подкласс Зачем использовать его? Можно ли хранить глобальные переменные в любом другом классе с той же целью, что и Application?

Спасибо,

Ответы

Ответ 1

Хороший вопрос!

Ваше приложение - это контекст, который всегда работает, пока ваши действия и службы запущены.

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

Вы можете использовать класс приложения как способ совместного использования данных или компонентов (например, для инъекции зависимостей). Например, если вы хотите использовать одноэлемент между действиями, вы можете создать экземпляр в классе приложения и предоставить getter, тогда все остальные контексты могут получить singleton через

((cast to your class)getApplicationContext()).getFoo();

Могут быть некоторые варианты использования, когда вам нужно делать что-либо до того, как будет запущено даже ваше первое действие, а затем сделайте это в методе onCreate класса приложения.

С другой стороны, вы никогда не должны полагаться на метод onDestroy класса Application, поскольку он не всегда называется. На Android нет контракта.

Но это редко, и, как правило, вам не нужно переопределять класс приложения. Инъекция зависимостей может быть достигнута другими способами с помощью RoboGuice или Dagger.

Ответ 2

Две вещи делают этот класс очень полезным:

  • Класс приложения создается до любого другого действия.
  • Он содержит контекст приложения

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

Все это происходит до загрузки любой активности, и все это доступно в глобальном масштабе для Деяний.

Простой пример того, что я имею в виду:

public class App extends Application{
    private static Resources sResources;

    //--I want to load strings resources from anywhere--
    public static String loadStringResource(int resID) {
        return sResources.getString(resID);
    }


    @Override
    public void onCreate() {
        super.onCreate();

        sResources = getResources();

        //---I want to load all preferences when my app starts---
        PreferenceManager.setDefaultValues(this,R.xml.prefs,false);

    }
}

Ответ 3

Расширение класса Application позволяет вам интегрироваться в жизненный цикл приложения.

Это также полезно для хранения информации на глобальном уровне приложения (хотя обычно полезно сохранять независимые действия)

Ответ 4

Класс Application знает контекст приложения и загружается, когда ваше приложение загружается, поэтому оно содержит правильные обратные вызовы для жизненного цикла приложения до начала вашей активности. Вы, скорее всего, не захотите расширять этот класс.

В документах API:

Как правило, нет необходимости в подклассе Application. В большинстве случаев статические синглтоны могут обеспечивать такую ​​же функциональность более модульным способом. Если вашему одноэлементу нужен глобальный контекст (например, для регистрации широковещательных приемников), функция для его получения может быть предоставлена ​​Контекст, который внутренне использует Context.getApplicationContext() при первом конструировании singleton.

http://developer.android.com/reference/android/app/Application.html