Android. Собеседование #3. Основные классы приложения

Автор:

1. Что такое Context?

Context представляет собой абстрактный класс в Android, от которого наследуются важные классы Application, Activity, Service. Важно отметить, что Fragment не наследуется от Context.

Класс Context предоставляет следующие возможности:
– получить доступ к различным ресурсам приложения, например к строковым ресурсам методом getString() или к графическим ресурсам getDrawable()
– запускать Activity
– отправлять широковещательное сообщения (broadcast) и регистрировать приёмники широковещательных сообщений (BroadcastReceiver)
– запускать/останавливать сервисы, а также биндить их к Activity
– получать пути к директориям приложения в памяти системы Android, например методом getFilesDir().

Чтобы получить объект класса Context, мы можем использовать следующие способы:
–  внутри вложенного класса или метода получить ссылку на объект MainActivity – Activity.this
– внутри фрагмента получить ссылку на объект родительской активности – getActivity
– получить ссылку на базовый контекст – getBaseContext
– получить ссылку на объект приложения – getApplicationContext
– внутри активности или сервиса получить ссылку на этот объект – getContext
– this (то же, что и getContext)

В таблице ниже представлены возможности Context относительно различных компонентов приложения.

Это не все возможности класса Context, рекомендую изучить его непосредственно в Android Studio.

2. Для чего используется Intent?

Intent – это класс в Android, который используется для для следующих возможностей:
– запуск Activity, передав объект Intent методу startActivity класса Context
– запуск сервиса, передав объект Intent методу startService класса Context
– отправка широковещательных сообщений, передав объект Intent методу sendBroadcast класса Context

Intent делится на два типа – явный (explicit) и неявный (Implicit). Явный объект Intent используется для запуска какого-либо конкретного компонента своего приложения, например.

Intent i = new Intent(this, ActivityTwo.class); startActivity(i);

Неявный объект Intent содержит в себе действие (Action), которое другому приложению необходимо выполнить, если оно это делать умеет, например отобразить карту или открыть PDF файл.

Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse("https://stackofskills.com"));
startActivity(i);

3. Что такое Bundle?

Bundle это потокобезопасный класс, который предназначен для хранения пар ключ-значение, т.е. мы можем положить в объект Bundle данные в виде примитивов либо объектов, реализующих интерфейс Parcelable. Может использоваться для передачи данных между Activity, для сохранения/восстановления данных при смены состояния Activity.

Bundle b = new Bundle();
String name = "Ivan";
b.putString("name", name);
Man man = new Man();
b.putParcelable("man", man);

4. Расскажите про класс Application?

Application – класс в Android который позволяет отслеживать состояние приложения в целом. При создании процесса Android приложения (запуске приложения через launcher), в первую очередь всегда инициализируется класс Application и далее все остальные необходимые части приложения.

В классе есть интерфейс ActivityLifecycleCallbacks, содержащий все методы жизненного цикла Activity, которые вызываются после вызова методов в Activity приложения.

public interface ActivityLifecycleCallbacks {
    void onActivityCreated(Activity activity, Bundle savedInstanceState);
    void onActivityStarted(Activity activity);
    void onActivityResumed(Activity activity);
    void onActivityPaused(Activity activity);
    void onActivityStopped(Activity activity);
    void onActivitySaveInstanceState(Activity activity, Bundle outState);
    void onActivityDestroyed(Activity activity);
}

Также класс содержит такие методы, как onLowMemory() и onTrimMemory() по отслеживанию использования памяти приложением.

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

5. Расскажите про класс R в Android?

final Класс R автоматически генерируется во время компиляции приложения инструментом aapt (Android Asset Packaging Tool), который предназначен для упаковки и компиляции всех ресурсов приложения. В классе находятся идентификаторы для всех ресурсов созданных в каталоге res, например для графических ресурсов класс R.drawable. Для каждого типа ресурсов предусмотрен свой подкласс (R.dimen, R.layout и т.д.). Также для каждого ресурса указанного типа создается статическая целочисленная переменная, например R.drawable.image. Эта переменная служит идентификатором ресурса, которую можно использовать для его получения.

 

Ваш адрес email не будет опубликован. Обязательные поля помечены *