это - getcontext android studio




Что такое «Контекст» на Android? (20)

В Android-программировании, что такое класс Context и для чего он используется?

Я читал об этом на сайте разработчика , но я не могу понять это четко.


Помощник помощника босса

Позволяет иметь небольшую аналогию, прежде чем погрузиться глубоко в технику Контекста

У каждого босса есть помощник или кто-то (мальчик-победитель), который делает для него менее важные и более трудоемкие вещи. Например, если им нужен файл или кофе, тогда помощник будет работать. Босс не будет знать, что происходит в фоновом режиме, но файл или задача будут доставлены

Так вот
Босс - приложение для Android
Помощник - Контекст
Файл или чашка кофе - Ресурс

Какой официальный сайт разработчика Android говорит о Context

Контекст - это ваша точка доступа для ресурсов, связанных с приложениями

Давайте посмотрим некоторые из таких ресурсов или задач

  • Запуск деятельности.

  • Получение абсолютного пути к каталогу конкретного кэша приложения в файловой системе.

  • Определение разрешенного разрешения для конкретного процесса и идентификатора пользователя, запущенного в системе.

  • Проверка того, предоставлено ли вам определенное разрешение.

И так далее.
Поэтому, если Android-приложение хочет начать действие, оно переходит прямо в Context (точка доступа), а класс Context возвращает ему ресурсы (в этом случае намерение).

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


Определение контекста

  • Контекст представляет данные среды
  • Он обеспечивает доступ к таким вещам, как базы данных

Более простые термины (пример 1)

  • Рассмотрим, что Person-X является генеральным директором компании-разработчика программного обеспечения.

  • В компании присутствует ведущий архитектор, этот ведущий архитектор делает всю работу в компании, которая включает в себя базу данных, пользовательский интерфейс и т. Д.

  • Теперь генеральный директор нанимает нового разработчика.

  • Именно Архитектор рассказывает об ответственности недавно нанятого человека на основе навыков нового человека, независимо от того, будет ли он работать с базой данных или пользовательским интерфейсом и т. Д.

Упрощенные термины (пример 2)

  • Это похоже на доступ к активности Android к ресурсу приложения.

  • Это похоже на то, когда вы посещаете отель, вы хотите завтрак, обед и ужин в подходящие сроки, не так ли?

  • Есть много других вещей, которые вам нравятся во время пребывания. Как вы получаете эти вещи?

  • Вы попросите человека, обслуживающего номера, принести вам эти вещи.

  • Здесь человек, обслуживающий номера, является контекстом, считая, что вы являетесь единственным мероприятием, и отель станет вашим приложением, и, наконец, завтрак, обед и ужин должны быть ресурсами.

Вещи, которые связаны с контекстом:

  1. Загрузка ресурса.
  2. Запуск новой деятельности.
  3. Создание представлений.
  4. получение системное обслуживание.

Контекст - это базовый класс для Activity , Service , Application и т. Д.

Другой способ описать это: рассматривать контекст как удаленный от телевизора и канала на телевидении, это ресурсы, службы, использование намерений и т. Д. - - - Здесь удаленный выступает как доступ, чтобы получить доступ ко всем разным ресурсам на передний план.

  • Таким образом, Remote имеет доступ к каналам, таким как ресурсы, сервисы, с использованием намерений и т. Д ....

  • Аналогично ... Тот, у кого есть доступ к удаленному, естественно имеет доступ ко всем вещам, таким как ресурсы, услуги, с использованием намерений и т. Д.

Различные методы, с помощью которых вы можете получить контекст

  • getApplicationContext()
  • getContext()
  • getBaseContext()
  • или this (когда в классе активности)

Пример:

TextView TV=new TextView(this);

this -> относится к контексту текущей активности.


Интерфейс к глобальной информации о среде приложения. Это абстрактный класс, реализация которого обеспечивается системой Android. Он позволяет получать доступ к ресурсам и классам приложений, а также перехватам для операций на уровне приложений, таких как запуск, трансляция и получение намерений и т. Д.


Класс android.content.Context обеспечивает подключение к системе Android и ресурсам проекта. Это интерфейс для глобальной информации о среде приложения.

Контекст также предоставляет доступ к службам Android, например службе местоположения.

Действия и службы расширяют класс Context .


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

Контекст - это дескриптор системы. Он предоставляет такие услуги, как разрешение ресурсов, получение доступа к базам данных и предпочтениям и т. Д. У приложения Android есть действия. Это похоже на дескриптор среды, в которой выполняется ваше приложение. Объект activity наследует объект Context.

Различные методы вызова, с помощью которых вы можете получить контекст 1. getApplicationContext (), 2. getContext (), 3. getBaseContext () 4. или это (когда в классе активности).


Контекст - это ссылка на текущий объект. Также контекст позволяет получить доступ к информации о среде приложения.


Контекст в основном предназначен для доступа к ресурсам и получения сведений о среде приложения (для контекста приложения) или активности (для контекста активности) или любого другого ...

Чтобы избежать утечки памяти, вы должны использовать контекст приложения для всех компонентов, для которых нужен объект контекста .... для более подробной информации нажмите here


Контекст означает, что Android узнает, в какую деятельность я должен пойти или действовать.

1 - Toast.makeText (контекст, «Ввести все детали», Toast.LENGTH_SHORT) .show (); он использовал в этом. Контекстный контекст = ActivityName.this;

2 -startActivity (новый Intent (контекст, LoginActivity.class));

в этом контексте означает, из какой деятельности вы хотите перейти на другую деятельность. контекст или ActivityName.this быстрее, getContext и getApplicatinContext.


Просто поместите его туда для новичков;

Итак, сначала поймите контекст Word:

В english-lib. это значит:

«Обстоятельства, которые формируют условия для события, заявления или идеи, и с точки зрения которых он может быть полностью понят и оценен».

«Части того, что написано или сказано, что непосредственно предшествует и следует за словом или проходом и разъясняет его значение».

Теперь возьмите такое же понимание в мире программирования:

контекст текущего состояния приложения / объекта. Это позволяет вновь созданным объектам понять, что происходит. Обычно вы вызываете его, чтобы получить информацию о другой части вашей программы (активность, пакет / приложение)

Вы можете получить контекст, вызывая getApplicationContext() , getContext(), getBaseContext() или this (когда в классе активности).

Чтобы получить контекст Anywhere в приложении, используйте следующий код:

Создайте новый класс AppContext в своем приложении для Android

public class AppContext extends Application {

    private static Context context;

    public void onCreate(){
        super.onCreate();
        AppContext.context = getApplicationContext();
    }

    public static Context getAppContext() {
        return AppContext.context;
    }
}

Теперь, когда вы хотите использовать контекст приложения в классе non-activity, вызовите этот метод, и у вас есть контекст приложения.

Надеюсь эта помощь;)


Простое, Androids Context - это беспорядок, который вам не понравится, пока вы не перестанете беспокоиться.

Context Android:

  • Бог-объекты.

  • Вещь, которую вы хотите передать всем своим приложением, когда вы начинаете разрабатывать Android, но избегайте этого, когда вы немного приблизитесь к программированию, тестированию и самому Android.

    • Неясная зависимость.

    • Общий источник утечек памяти.

    • PITA для тестирования.

  • Фактический контекст, используемый системой Android для отправки разрешений, ресурсов, предпочтений, служб, трансляций, стилей, отображения диалогов и раздувания макета. И вам нужны разные экземпляры Context для некоторых отдельных вещей (очевидно, вы не можете показать диалог из приложения или контекста службы, макеты, раздутые из контекста приложения и активности, могут отличаться).


Проще говоря:

Как следует из названия, это контекст текущего состояния приложения / объекта. Это позволяет вновь созданным объектам понять, что происходит. Обычно вы вызываете его, чтобы получить информацию о другой части вашей программы (активность и пакет / приложение).

Вы можете получить контекст, вызывая getApplicationContext() , getContext() , getBaseContext() или this (когда в классе, который распространяется из Context , например, класса Application, Activity, Service и IntentService).

Типичное использование контекста:

  • Создание новых объектов : создание новых представлений, адаптеров, прослушивателей:

    TextView tv = new TextView(getContext());
    ListAdapter adapter = new SimpleCursorAdapter(getApplicationContext(), ...);
    
  • Доступ к стандартным общим ресурсам : такие службы, как LAYOUT_INFLATER_SERVICE, SharedPreferences:

    context.getSystemService(LAYOUT_INFLATER_SERVICE)
    getApplicationContext().getSharedPreferences(*name*, *mode*);
    
  • Доступ к компонентам неявно : относительно поставщиков контента, трансляций, намерений

    getApplicationContext().getContentResolver().query(uri, ...);
    

Экземпляры класса android.content.Context обеспечивают подключение к системе Android, которая выполняет приложение. Например, вы можете проверить размер текущего дисплея устройства через контекст.

Он также предоставляет доступ к ресурсам проекта. Это интерфейс для глобальной информации о среде приложения.

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

Деятельность и услуги расширяют класс Context. Поэтому они могут напрямую использоваться для доступа к Контексту.


Source

Тема Контекста в Android, похоже, запутывает многих. Люди просто знают, что контекст необходим довольно часто, чтобы делать базовые вещи в Android. Люди иногда паникуют, потому что они пытаются выполнить некоторую операцию, требующую контекста, и они не знают, как «получить» правильный контекст. Я попытаюсь демистифицировать идею Context в Android. Полное рассмотрение проблемы выходит за рамки этой публикации, но я попытаюсь дать общий обзор, чтобы вы поняли, что такое Контекст и как его использовать. Чтобы понять, что такое контекст, давайте посмотрим на исходный код:

https://github.com/android/platform_frameworks_base/blob/master/core/java/android/content/Context.java

Что такое контекст?

Ну, сама документация дает довольно простое объяснение: класс Context - это «Интерфейс для глобальной информации о среде приложения».

Сам класс контекста объявлен как абстрактный класс, реализация которого обеспечивается ОС Android. В документации далее указывается, что Context «... позволяет получить доступ к ресурсам и классам приложений, а также перехватам для операций на уровне приложения, таким как запуск, трансляция и получение намерений и т. Д.».

Теперь вы можете понять, почему имя Context. Это потому, что это именно так. Контекст предоставляет ссылку или крючок, если потребуется, для Activity, Service или любого другого компонента, тем самым связывая его с системой, обеспечивая доступ к глобальной прикладной среде. Другими словами: Контекст дает ответ на вопрос о компонентах «где, черт возьми, я отношусь к приложению в целом и как мне обращаться / общаться с остальной частью приложения?» Если это все кажется немного запутанным, быстро посмотрите на методы, открытые классом Context, дает некоторые дополнительные сведения о его истинном характере.

Вот случайная выборка этих методов:

  1. getAssets()
  2. getResources()
  3. getPackageManager()
  4. getString()
  5. getSharedPrefsFile()

Что общего у всех этих методов? Все они позволяют любому, кто имеет доступ к Контексту, иметь доступ к ресурсам приложения.

Другими словами, контекст перехватывает компонент, который ссылается на него, на остальную среду приложения. Например, в вашем приложении доступны ресурсы (думаю, «/ активы» в вашем проекте), при условии, что активность, служба или кто-то знает, как получить доступ к этим ресурсам. То же самое касается getResources() который позволяет делать такие вещи, как getResources().getColor() который подключит вас к colors.xml (не забывайте, что aapt разрешает доступ к ресурсам через java-код, это отдельная проблема).

Результатом является то, что Context - это то, что позволяет доступ к системным ресурсам и его компонентам перехвата в «большее приложение». Давайте рассмотрим подклассы Context , классы, обеспечивающие реализацию абстрактного класса Context . Наиболее очевидным классом является Класс Activity ContextThemeWrapper наследуется от ContextThemeWrapper , который наследуется от ContextWrapper , который наследуется от самого Context . Эти классы полезны для понимания вещей на более глубоком уровне, но пока достаточно знать, что ContextThemeWrapper и ContextWrapper - это в значительной степени то, что они они реализуют абстрактные элементы самого класса Context путем «обертывания» контекста (фактического контекста) и делегирования этих функций в этот контекст. Пример полезен - в классе ContextWrapper абстрактный метод getAssets из класса Context осуществляется следующим образом:

@Override
    public AssetManager getAssets() {
        return mBase.getAssets();
    }

mBase - это просто поле, заданное конструктором в конкретном контексте. Таким образом, контекст завернут, и ContextWrapper делегирует его реализацию метода getAssets в этот контекст. Перейдем к рассмотрению класса Activity который в конечном итоге наследует от Context чтобы увидеть, как все это работает.

Вероятно, вы знаете, что такое Activity, но для обзора - это в основном «единственная вещь, которую пользователь может сделать. Он заботится о предоставлении окна для размещения пользовательского интерфейса, с которым пользователь взаимодействует. Разработчики, знакомые с другими API-интерфейсами и даже не разработчиками, могут подумать об этом как о «экране». Это технически неточно, но это не имеет значения для наших целей. Итак, как взаимодействуют Activity и Context и что именно происходит в их отношениях наследования?

Опять же, полезно взглянуть на конкретные примеры. Мы все знаем, как начать деятельность. Если у вас есть «контекст», с которого вы работаете, вы просто вызываете startActivity(intent) , где Intent описывает контекст, из которого вы начинаете действие и активность, которые вы хотите запустить. Это знакомая startActivity(this, SomeOtherActivity.class) .

И что this ? this ваша активность, потому что класс Activity наследуется от Context . Полный совок выглядит так: Когда вы вызываете startActivity , в конечном итоге класс Activity выполняет что-то вроде этого:

Instrumentation.ActivityResult ar =
                mInstrumentation.execStartActivity(
                    this, mMainThread.getApplicationThread(), mToken, this,
                    intent, requestCode);

Поэтому он использует execStartActivity из класса Instrumentation (фактически из внутреннего класса Instrumentation называемого ActivityResult ).

На этом этапе мы начинаем заглядывать в внутреннюю систему.

Здесь ОС фактически обрабатывает все. Итак, как Instrumentation начинает работу точно? Ну, параметр this в методе execStartActivity выше - ваша Activity, то есть Context, и execStartActivity использует этот контекст.

Общий обзор 30 000: класс Instrumentation сохраняет следы списка операций, которые он контролирует, чтобы сделать это. Этот список используется для координации всех действий и обеспечения бесперебойной работы всего процесса управления потоками деятельности.

Есть некоторые операции, которые я не полностью изучил, в каких проблемах с координатами и процессах. В конечном итоге ActivityResult использует собственную операцию - ActivityManagerNative.getDefault().startActivity() которая использует Context который вы передали, когда вы вызывали startActivity . Контекст, в котором вы проходили, используется для оказания помощи в «разрешении намерения», если это необходимо. Намеренное разрешение - это процесс, с помощью которого система может определить цель намерения, если она не указана. (Обратитесь к руководству для получения более подробной информации).

И для того, чтобы Android сделал это, ему нужен доступ к информации, предоставляемой Context . В частности, системе необходимо получить доступ к ContentResolver чтобы он мог «определить тип MIME данных намерения». Весь этот бит о том, как startActivity использует контекст, был немного сложным, и я сам не полностью понимаю внутренности. Основной целью было просто проиллюстрировать доступ к ресурсам приложений для выполнения многих операций, которые необходимы для приложения. Context - это то, что обеспечивает доступ к этим ресурсам. Более простым примером может быть Views. Мы все знаем, что вы создаете пользовательский вид, расширяя RelativeLayout или какой-либо другой класс View , вы должны предоставить конструктор, который принимает Context в качестве аргумента. Когда вы создаете экземпляр своего пользовательского представления, который вы передаете в контексте. Почему? Поскольку представление должно иметь возможность иметь доступ к темам, ресурсам и т. д. Просмотр сведений о конфигурации. Просмотр конфигурации на самом деле является отличным примером. Каждый Контекст имеет различные параметры (поля в реализациях Context ), которые устанавливаются самой ОС для такие вещи, как размер или плотность дисплея. Легко понять, почему эта информация важна для создания представлений и т. Д.

Последнее слово: почему-то люди, не знакомые с Android (и даже люди, не такие новые), совершенно забывают об объектно-ориентированном программировании, когда дело доходит до Android. По какой-то причине люди пытаются свести свое развитие Android к заранее продуманным парадигмам или изученным поведением.

У Android есть своя парадигма и определенная модель, которая на самом деле вполне последовательна, если отпустить ваши заранее продуманные понятия и просто прочитать документацию и руководство для разработчиков. Однако мой реальный момент, хотя «получение правильного контекста» иногда может быть сложным, люди необоснованно паникуют, потому что они сталкиваются с ситуацией, когда им нужен контекст, и считают, что у них его нет. Еще раз, Java является объектно-ориентированным языком с дизайном наследования.

Вы только «имеете» контекст внутри своей деятельности, потому что ваша деятельность сама наследуется из контекста. Там нет волшебства (за исключением всего, что ОС делает сама по себе, чтобы установить различные параметры и правильно «настроить» ваш контекст). Таким образом, устранение проблем с памятью / производительностью (например, сохранение ссылок на контекст, когда вам это не нужно или что-то делать так, как это имеет негативные последствия для памяти и т. Д.), Контекст - это объект, как любой другой, и его можно передавать как и любой POJO (обычный Java-объект). Иногда вам может понадобиться делать умные вещи для извлечения этого контекста, но любой обычный Java-класс, который простирается от ничего, кроме самого объекта, может быть написан таким образом, который имеет доступ к контексту; просто выведите открытый метод, который принимает контекст, а затем, используя его, должен использовать его в этом классе. Это не предназначалось для исчерпывающего обращения к внутренним компонентам контекста или Android, но я надеюсь, что это поможет в демистификации контекста.


Context - это «интерфейс» к глобальной информации о среде приложения. На практике Context на самом деле является абстрактным классом , реализация которого обеспечивается системой Android.

Он позволяет получать доступ к ресурсам и классам приложений, а также перехватам для операций на уровне приложений, таким как запуск, трансляция и получение намерений и т. Д.

На следующем рисунке вы можете увидеть иерархию классов, где Context является корневым классом этой иерархии. В частности, стоит подчеркнуть, что Activity является потомком Context .


Contextозначает компонент (или приложение) в течение определенного периода времени. Если я ем столько пищи между 1 и 2 часами, то мой контекст того времени используется для доступа ко всем методам (или ресурсам), которые я использую в течение этого времени. Контент - это компонент (приложение) для определенного времени. Contextкомпонентов приложения постоянно меняется на основе базового жизненного цикла компонентов или приложений. Так , например, внутри OnCreate () А.Н. Activity,

getBaseContext()- дает contextиз , Activityкоторый устанавливается (создается) конструктором деятельности. getApplicationContext()- дает Contextнастройку (созданную) во время создания приложения.

Примечание: <application>содержит все компоненты Android.

<application>
    <activity> .. </activity> 

    <service>  .. </service>

    <receiver> .. </receiver>

    <provider> .. </provider>
</application> 

Это означает, что при вызове getApplicationContext()изнутри любого компонента вы вызываете общий контекст всего приложения.

Context продолжает изменяться системой на основе жизненного цикла компонентов.


Contextозначает ток. Contextиспользуйте операцию для текущего экрана. ех.
1. getApplicationContext ()
2. getContext ()

Toast.makeText(getApplicationContext(), "hello", Toast.LENGTH_SHORT).show();

Что такое Context ?

В справочной документации по Android это объект, который представляет различные данные среды. Он обеспечивает доступ к локальным файлам, базам данных, загрузчикам классов, связанным с окружающей средой, службам (включая услуги на системном уровне) и т. Д. Всюду по этой книге, а также в повседневной кодировке с Android вы увидите, что контекст проходил часто.

Из книги « Android in Practice », стр. 60.

Для некоторых API Android требуется параметр Context как параметр

Если вы просмотрите различные API Android, вы заметите, что многие из них берут объект android.content.Context в качестве параметра. Вы также увидите, что действие или служба обычно используются в качестве Context . Это работает, потому что оба этих класса простираются от Context .


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

Большинство приватных данных одинаковы для всех видов деятельности / услуг / распространителей одного приложения.

Поскольку Application, Activity, Service реализуют интерфейс Context, они могут использоваться там, где для вызова api необходим параметр Context


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


Этот атрибут объявляет, с какими действиями этот макет связан по умолчанию .







android-context