На прошлом уроке (№ 21) мы создали приложение, которое содержит два Activity. Напомню, что для создания Activity, необходимо:
— создать класс, с суперклассом android.app.Activity
— создать Activity-запись в манифесте и указать ей созданный класс в поле Name
Надеюсь прошлый урок не вызвал особых трудностей и процедура создания Activity примерно уложилась в голове. Теперь мы можем обратить внимание на код вызова Activity.
Intent intent = new Intent(this, ActivityTwo.class); startActivity(intent);
Context в Android приложении
Как следует из названия, это контекст текущего состояния приложения или объекта. Это позволяет вновь созданным объектам понять, что вообще происходит. Обычно его вызывают, чтобы получить информацию о другой части программы.
Кроме того, Context является проводником в систему, он может предоставлять ресурсы, получать доступ к базам данных, преференсам и т.д. Ещё в Android приложениях есть Activity . Это похоже на проводник в среду, в которой выполняется ваше приложение. Объект Activity наследует объект Context . Он позволяет получить доступ к конкретным ресурсам и информации о среде приложения.
Учим useContext за 10 минут — React Hooks. Вся база React Context API
Context присутствует практически повсюду в Android приложении и является самой важной его частью, поэтому необходимо понимать, как правильно его использовать.
Неправильное использование Context может легко привести к утечкам памяти в Android приложении.
Существует много разных типов контекста, поэтому давайте разберёмся, что каждый из них представляет из себя, как и когда их правильно использовать.
Контекст приложения
Это singleton-экземпляр (единственный на всё приложение), и к нему можно получить доступ через функцию getApplicationContext() . Этот контекст привязан к жизненному циклу приложения. Контекст приложения может использоваться там, где вам нужен контекст, жизненный цикл которого не связан с текущим контекстом или когда вам нужно передать контекст за пределы Activity .
Например, если вам нужно создать singleton-объект для вашего приложения, и этому объекту нужен какой-нибудь контекст, всегда используйте контекст приложения.
Если вы передадите контекст Activity в этом случае, это приведет к утечке памяти, так как singleton-объект сохранит ссылку на Activity и она не будет уничтожена сборщиком мусора, когда это потребуется.
В случае, когда вам нужно инициализировать какую-либо библиотеку в Activity , всегда передавайте контекст приложения, а не контекст Activity .
Таким образом, getApplicationContext() нужно использовать тогда, когда известно, что вам нужен контекст для чего-то, что может жить дольше, чем любой другой контекст, который есть в вашем распоряжении.
Контекст Activity
Этот контекст доступен в Activity и привязан к её жизненному циклу. Контекст Activity следует использовать, когда вы передаете контекст в рамках Activity или вам нужен контекст, жизненный цикл которого привязан к текущему контексту.
Урок 3. Введение в React Hooks: useContext
getContext() в ContentProvider
Этот контекст является контекстом приложения и может использоваться аналогично контексту приложения. К нему можно получить доступ через метод getContext() .
Когда нельзя использовать getApplicationContext()?
- Это не полноценный контекст, поддерживающий всё, что может Activity . Некоторые вещи, которые вы попытаетесь сделать с этим контекстом, потерпят неудачу, в основном связанные с графическим интерфейсом.
- Могут появляться утечки памяти, если контекст из getApplicationContext() удерживается на каком-то объекте, который вы не очищаете впоследствии. Если же где-то удерживается контекст Activity , то как только Activity уничтожается сборщиком мусора, всё остальное тоже уничтожается. Объект Application остается на всю жизнь вашего процесса.
Правило большого пальца
В большинстве случаев используйте контекст, доступный непосредственно из компонента, в котором вы работаете в данный момент. Вы можете безопасно хранить ссылку на него, если она не выходит за пределы жизненного цикла этого компонента. Как только вам нужно сохранить ссылку на контекст в объекте, который живет за пределами вашей Activity или другого компонента, даже временно, используйте ссылку на контекст приложения.
- android development
- android
- андроид
- перевод с английского
- программирование
- разработка
- devcolibri
- никто не читает теги
- Разработка мобильных приложений
- Разработка под Android
Источник: habr.com
Освоение контекста Android
Контекст в Android — один из наиболее часто используемых и злоупотребляемых объектов. Но большинство статей в сети посвящены определению того, что это такое. Я не мог найти хороший ресурс, который дал бы мне понимание и помог мне понять более широкую картину. Я попытался упростить эту статью.
Предисловие
Моя миссия в этой статье — помочь вам освоить Android Context. Это одна из основных тем разработки под Android, и вряд ли кто-либо из разработчиков использует контекст полностью и так, как он был разработан.
Изначально я опубликовал эту статью серией из четырех постов на моем сайте. Если вам интересно читать главу за главой, не стесняйтесь читать там.
Начиная
Вы когда-нибудь сталкивались с этим вопросом: в чем разница между getContext() , this , getBaseContext() и getApplicationContext() ? Если да, эта статья поможет прояснить большую часть вашей путаницы.
Примечание. вы должны знать основы разработки для Android, такие как Activity, Fragments, Broadcast Receiver и другие строительные блоки. Если вы новый разработчик, который только начинает свое путешествие в мир Android, возможно, это не лучшее место для начала.
Что, черт возьми, за контекст?
Посмотрим правде в глаза, контекст — одна из самых плохо спроектированных функций Android API. Вы могли бы назвать это объектом «Бог».
Android-приложение или пакет приложений (APK) — это набор компонентов. Эти компоненты определены в манифесте и состоят в основном из Activity (UI), Service (Background), BroadcastReceiver (Action), ContentProvider (Data) и Resources (изображения, строки и т. Д.).
Разработчик может выбрать предоставление этих компонентов системе с помощью фильтра намерений. Например: отправить электронное письмо или поделиться изображением. Они также могут предоставить доступ к компонентам только другим компонентам своего приложения.
Точно так же операционная система Android также была разработана для предоставления доступа к компонентам. Некоторые из них хорошо известны: WifiManager, Vibrator и PackageManager.
Контекст — это мост между компонентами. Вы используете его для связи между компонентами, создания экземпляров компонентов и доступа к компонентам.