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 относительно различных компонентов приложения.
Возможности | Application | Service | Content Provider | Broadcast Receiver | Activity |
Отобразить Dialog, Toast | - | - | - | - | + |
Запустить Activity | - | - | - | - | + |
Использование Layout Inflation | - | - | - | - | + |
Запустить Service | + | + | + | + | + |
Привязать Service | + | + | + | - | + |
Отправить Broadcast | + | + | + | + | + |
Зарегестрировать BroadcastReceiver | + | + | + | - | + |
Доступ к resources | + | + | + | + | + |
Это не все возможности класса 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. Эта переменная служит идентификатором ресурса, которую можно использовать для его получения.