моб разраб. Лабораторные работы с 1 по 21. Лабораторная работа Использование значений строк и цветов
Скачать 5.49 Mb.
|
Класс ApplicationСоздание собственной реализации класса Application дает возможность: контролировать состояние приложения передавать объекты между программными компонентами поддерживать и контролировать ресурсы, которые используются в нескольких компонентах одного приложения При создании операционной системой процесса, в котором будет исполняться программа (с точки зрения Unix-подобных систем, процессы являются контейнерами, в которых исполняются программы) создается экземпляр класса Application, который описан в Манифесте приложения. Таким образом, Application по своей природе является синглтоном (singleton) и должен быть правильно реализован, чтобы предоставлять доступ к своим методам и переменным. Наследование и использование класса Application Ниже показан каркас для наследования класса Application и использования его в качестве синглтона: import android.app.Application; import android.content.res.Configuration; public class MyApplication extends Application { private static MyApplication singleton; // Возвращает экземпляр данного класса public static MyApplication getInstance() { return singleton; } @Override public final void onCreate() { super.onCreate(); singleton = this; } } После создания реализация класса Application должна быть зарегистрирована с Манифесте приложения, для этого используется элемент <application>: android:icon="@drawable/icon" android:name="MyApplication"> [... вложенные элементы ...] Теперь при запуске приложения будет создавать экземпляр вашей реализации класса Application. Если есть необходимость хранения состояния приложения и глобальных ресурсов, реализуйте соответствующие методы в вашей реализации класса и используйте их в компонентах вашего приложения: SomeObject value = MyApplication.getInstance().getGlobalStateValue(); MyApplication.getInstance().setGlobalStateValue(someObjectValue); Такой подход может быть эффективен при передаче объектов между слабосвязанными частями программы и для контроля за общими ресурсами и состоянием приложения. Обработка событий жизненного цикла приложения Аналогично обработчикам событий класса Activity, обработчики событий класса Application так же можно переопределять для управления реакцией приложения на те или иные события жизненного цикла: import android.app.Application; import android.content.res.Configuration; public class MyApplication extends Application { @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); } @Override public void onCreate() { super.onCreate(); } @Override public void onLowMemory() { super.onLowMemory(); } @Override public void onTerminate() { super.onTerminate() } } Назначение этих методов следующее: onCreate: вызывается при создании приложения, переопределяется для создания и инициализации свойств, в которых хранятся состояния приложения или глобальные ресурсы. onTerminate: может быть вызван при преждевременном завершении работы приложения (но может и не быть вызван: если приложение закрывается ядром, чтобы освободить ресурсы для других программ, onTerminate вызван не будет). onLowMemory: предоставляет возможность приложениям освободить дополнительную память (по-хорошему :), когда ОС не хватает ресурсов. Этот метод переопределяется для того, чтобы очистить кэш или освободить ненужные в данный момент ресурсы. onConfigurationChanged: переопределяется, если необходимо отслеживать изменения конфигурации на уровне приложения(такие, например, как поворот экрана, закрытие выдвижной клавиатуры устройства и т. п.). Понятие контекста Класс android.context.Context представляет из себя интерфейс для доступа к глобальной информации об окружении приложения. Это абстрактный класс, реализация которого обеспечивается системой Android. Context позволяет получить доступ к специфичным для данного приложения ресурсам и классам, а также для вызова операций на уровне приложения, таких, как запуск Активностей, отправка широковещательных сообщений, получение намерений (Intent) и прочее. Данный класс также является базовым для классов Activity, Application и Service. Получить доступ контексту можно с помощью методов getApplicationContext, getContext, getBaseContext, а также просто с помощью свойства this (изнутри Активности или Сервиса). Мы уже воспользовались последним способом при вызове статического метода makeText класса Toast, который получает контекст в качестве первого параметра: Toast.makeText(this, "onCreate()", Toast.LENGTH_LONG).show(); Типичное использование контекста может быть таким: Создание новых объектов (Представлений, Адаптеров и т. д.): TextView myTextView = new TextView(getContext()); ListAdapter listAdapter = new SimpleCursorAdapter(getApplicationContext(), ...); Доступ к стандартным глобальным ресурсам: context.getSystemService(LAYOUT_INFLATER_SERVICE); prefs = getApplicationContext().getSharedPreferences("PREFS",MODE_PRIVATE); Неявное использование глобальных компонентов системы: cursor = getApplicationContext().getContentResolver().query(uri, ...); |