Що таке "Контекст" на Android?


Відповіді:


1506

Простіше кажучи:

Як випливає з назви, це контекст поточного стану програми / об'єкта. Це дозволяє новоствореним об’єктам зрозуміти, що відбувається. Зазвичай ви телефонуєте йому, щоб отримати інформацію про іншу частину програми (діяльність та пакет / додаток).

Ви можете отримати контекст виклику getApplicationContext(), getContext(), getBaseContext()або this(якщо в класі , який простягається від Context, наприклад, додатки, активність, класи обслуговування і 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, ...);

51
У вашому прикладі context.getSystemService(LAYOUT_INFLATER_SERVICE), де і як це contextвизначено?
Денніс

8
Це добре пояснено, для чого нам потрібен контекст, динамічно створюючи перегляд тексту. Але динамічно створюючи масиви текстових переглядів, нам не потрібно згадувати жодний контекст. Чому це так? TextView [] textview = новий TextView [10];
Абхінав Арора

38
@AbhinavArora, визначаючи масив, ви фактично не будуєте екземпляр будь-якого перегляду тексту (ви, в основному, просто створюєте простір для них). Після того, як ви введете будь-які значення в цей масив, вам або знадобиться попередньо створений TextViews, або потрібен контекст, який дозволить вам їх створити.
mc1arke

24
Для чого думкам потрібен контекст? Наприклад, що TextView не міг би зробити, якби не було контексту?
динозавр

15
Шматок коду без "Контексту" може працювати в кожній операційній системі, що має JVM. Але якщо є контекст, він повинен працювати на Android. Якщо ви хочете використовувати конкретні Android-речі (доступ до місця розташування пристрою, фотографування, запуск фонової послуги тощо), вам потрібен контекст, хоча вам не потрібен, якщо ви робите http запит. Контекст можна вважати містком між Java та Android.
Фарук Топтас

507

Визначення контексту

  • Контекст представляє дані про середовище
  • Він забезпечує доступ до речей, таких як бази даних

Простіші терміни (приклад 1)

  • Поміркуйте, Person-X є генеральним директором компанії-початківця програмного забезпечення.

  • У компанії присутній провідний архітектор, цей головний архітектор виконує всю роботу в компанії, яка передбачає такі, як база даних, користувальницький інтерфейс тощо.

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

  • Саме архітектор повідомляє про відповідальність новоспеченої особи на основі навичок нової людини, чи буде він працювати в базі даних або інтерфейсі тощо.

Простіші терміни (приклад 2)

  • Це як доступ андроїд-активності до ресурсу програми.

  • Це схоже на те, коли ви відвідуєте готель, хочете сніданок, обід та вечерю у відповідні терміни, правда?

  • Є багато інших речей, які вам подобаються під час перебування. Як ви отримуєте ці речі?

  • Ви просите людину, яка обслуговує номер, принести ці речі для вас.

  • Тут людина, яка обслуговує номер - це контекст, враховуючи, що ви є єдиною діяльністю, і готель стане вашим додатком, нарешті, ресурси повинні бути сніданком, обідом та вечерею.


Що включає контекст:

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

Контекст є базовим класом для діяльності , сервісу , додатків тощо

Ще один спосіб описати це: Розгляньте контекст як віддалений від телевізора та каналу на телебаченні ресурси, послуги з використанням намірів тощо - - - Тут віддалений функціонує як доступ, щоб отримати доступ до всіх різних ресурсів на перший план.

  • Отже, Remote має доступ до таких каналів, як ресурси, послуги, використовуючи наміри тощо.

  • Так само ... Кожен, хто має доступ до віддаленого, природно має доступ до всіх речей, таких як ресурси, послуги, використовуючи наміри тощо


Різні методи, за допомогою яких можна отримати контекст

  • getApplicationContext()
  • getContext()
  • getBaseContext()
  • або this(якщо в класі активності)

Приклад:

TextView tv = new TextView(this);

Ключове слово thisпосилається на контекст поточної діяльності.


3
Гаразд, тому клас, похідний від Activity IS, сам контекст. Ось чому, передаючи це новоствореним поглядам, ми передаємо контекст.
0лег

7
Цікаво, чи є хорошим дизайнерським рішенням доступ до контексту з такої кількості різних місць? На мою думку, одного статичного getContext () у програмі було б достатньо.
Триларіон

@Trilarion ... Це залежить від того, як ви хочете використовувати контекст getApplicationContext(), getContext(), getBaseContext()..... дивіться це -> ( stackoverflow.com/a/10641257 )
Devrath

Просто для розширення останнього фрагмента, створення текстового перегляду: У деяких випадках може знадобитися зателефонувати SomeActivityName.this. IN потік для екземпляра thisстосується потоку, а не активності
Zoe

1
Чи унікальний контекстний об'єкт для apk або ОС Android? Чи може програма мати два різних контексти?
valijon

366

Джерело


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

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

Що саме таке Контекст?

Ну а сама документація дає досить просте пояснення: клас Context - це "інтерфейс до глобальної інформації про середовище програми".

Сам клас контексту оголошений абстрактним класом, реалізацію якого забезпечує ОС Android. Документація додатково передбачає, що Контекст "... дозволяє отримати доступ до ресурсів і класів, що стосуються додатків, а також додаткові виклики для операцій на рівні додатків, таких як запуск діяльності, трансляція та отримання намірів тощо".

Зараз ви можете дуже добре зрозуміти, чому ім’я Контекст. Це тому, що це просто так. Контекст надає посилання або гачок, якщо ви хочете, для діяльності, сервісу або будь-якого іншого компонента, тим самим пов'язуючи його з системою, що дозволяє отримати доступ до глобального середовища програми. Іншими словами: Контекст дає відповідь на питання про компоненти, "де я, пекло, по відношенню до програми, і як я можу отримати доступ / спілкуватися з рештою програми?" Якщо все це здається дещо заплутаним, швидкий огляд методів, викритих класом Context, дає ще деякі підказки про його справжню природу.

Ось випадковий вибірки цих методів:

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

Що спільного для всіх цих методів? Усі вони дозволяють кожному, хто має доступ до контексту, мати можливість отримати доступ до ресурсів, що стосуються додатків.

Іншими словами, контекст підключає компонент, який має посилання на нього в іншому середовищі програми. Наприклад, папка "/ папки активів" у вашому проекті доступна в додатку за умови, що діяльність, сервіс або що інше знає, як отримати доступ до цих ресурсів. Те саме стосується того, getResources()що дозволяє робити такі речі, які зачеплять getResources().getColor()вас до colors.xmlресурсу (ніколи не майте на увазі, що aapt дозволяє отримати доступ до ресурсів за допомогою коду Java, це окрема проблема).

Підсумок - Contextце те, що дозволяє отримати доступ до системних ресурсів та його компонентів, що приєднуються до «більшої програми». Давайте розглянемо підкласи Contextкласів, які забезпечують реалізацію рефератуContext класу. Найбільш очевидний класом є Activityкласом. ActivityУспадкував від того ContextThemeWrapper, що успадковує від ContextWrapper, який успадковує від Contextсебе. Ці класи корисно дивитись, щоб зрозуміти речі на більш глибокому рівні, але поки що достатньо знати, що ContextThemeWrapperі дляContextWrapper майже все те, що вони звучать. Вони реалізують абстрактні елементи Contextклас сам, "загортаючи" контекст (власне контекст) і делегуючи ці функції до цього контексту. Приклад корисний - уContextWrapperклас, абстрактний метод getAssetsз Contextкласу реалізується наступним чином:

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

mBaseце просто поле, встановлене конструктором у конкретний контекст. Таким чином, контекст загортається і ContextWrapperделегує його реалізацію методу getAssets до цього контексту. Давайте повернемось до вивчення Activityкласу, який в кінцевому рахунку успадковується, Contextщоб побачити, як це все працює.

Ви, напевно, знаєте, що таке Діяльність, але для перегляду - це в основному єдина річ, яку може зробити користувач. Він повинен забезпечити вікно, в якому розмістити інтерфейс користувача, з яким користувач взаємодіє '. Розробники, знайомі з іншими API та навіть не розробники, можуть подумати про це просто "екраном". Це технічно неточно, але це не має значення для наших цілей. Отже , як Activityі Contextвзаємодіють і що саме відбувається в їх відносинах спадкування?

Знову ж, корисно подивитися конкретні приклади. Усі ми знаємо, як запустити «Діяльність». За умови, що у вас є "контекст", з якого ви починаєте діяльність, ви просто телефонуєтеstartActivity(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наведеному вище способі - це ваша активність, тобто контекст, і execStartActivityвикористовує цей контекст.

Огляд 30 000 такий: клас Приладобудування відслідковує список видів діяльності, які він контролює, щоб зробити це своєю роботою. Цей список використовується для координації всіх видів діяльності та забезпечення впевненості в управлінні потоком діяльності.

Є деякі операції, які я не до кінця вивчив, в яких питаннях координати нитки та процеси. Зрештою, ActivityResultвикористовується нативна операція - ActivityManagerNative.getDefault().startActivity()яка використовує те, Contextщо ви передали, коли ви дзвонили startActivity. Контекст, який ви передали, використовується, якщо це потрібно, щоб допомогти у вирішенні намірів. Розв'язання намірів - це процес, за допомогою якого система може визначити ціль наміру, якщо вона не надається. (Ознайомтеся з посібником тут для отримання більш детальної інформації).

А для того, щоб Android це зробив, йому потрібен доступ до інформації, яку надає компанія Context. Зокрема, системі потрібно отримати доступ до ContentResolverтак, щоб вона могла "визначити тип MIME даних намірів". Це весь біт про те, як startActivityвикористання контексту було дещо складним, і я не повністю розумію внутрішню інформацію. Мій головний пункт полягала лише в тому, щоб проілюструвати, яким чином потрібно отримати доступ до ресурсів для всіх додатків, щоб виконати багато операцій, які є важливими для програми. ContextЦе те, що забезпечує доступ до цих ресурсів. Простішим прикладом можуть бути представлення даних. Усі ми знаємо, що ви створюєте користувацький перегляд за допомогою розширення RelativeLayoutчи іншого Viewкласу, ви повинні надати конструктор, який займаєContextяк аргумент. Коли ви створюєте власний перегляд, ви переходите в контекст. Чому? Тому що Перегляд повинен мати доступ до тем, ресурсів та інших деталей конфігурації Перегляду. Конфігурація перегляду насправді є прекрасним прикладом. Кожен контекст має різні параметри (поля в Contextреалізаціях s), які встановлює сама ОС для таких речей, як розмірність або щільність відображення. Неважко зрозуміти, чому ця інформація важлива для налаштування переглядів тощо.

Одне заключне слово: чомусь люди, які не знають про Android (і навіть люди не такі нові), схоже, повністю забувають про об'єктно-орієнтоване програмування, коли мова йде про Android. Чомусь люди намагаються прив’язати свою розробку Android до заздалегідь задуманих парадигм чи вивченої поведінки.

Android має власну парадигму та певний зразок, який насправді цілком відповідає, якщо відпустити ваші заздалегідь задумані поняття та просто прочитати документацію та посібник із розробників. Моя реальна думка, однак, хоча «отримати правильний контекст» іноді може бути складним, люди невиправдано панікують, оскільки вони стикаються з ситуацією, коли їм потрібен контекст, і думають, що у них цього немає. Знову ж таки, Java - об'єктно-орієнтована мова із спадковим дизайном.

Ви лише "маєте" контекст у своїй діяльності, оскільки сама діяльність успадковується від контексту. У цьому немає ніякої магії (крім усього, що ОС робить сама, щоб встановити різні параметри та правильно "налаштувати" ваш контекст). Отже, відкладаючи проблеми з пам’яттю / продуктивністю (наприклад, зберігання посилань на контекст, коли вам не потрібно робити це чи робити це таким чином, що має негативні наслідки для пам’яті тощо), Контекст - це об’єкт, як і будь-який інший, і його можна передавати навколо як і будь-який POJO (звичайний звичайний об'єкт Java). Іноді вам може знадобитися робити розумні речі, щоб отримати цей контекст, але будь-який звичайний клас Java, який поширюється ні на що, крім самого Object, може бути записаний таким чином, що має доступ до контексту; просто розкрийте публічний метод, який займає контекст, а потім використовуйте його в цьому класі за потребою.


33
Це відмінна відповідь. Набагато краще прийнятого, який говорить лише те, що всі інтуїтивно знають.
Гонза Кальфус

5
це довга відповідь, яку ви шукаєте! добре пояснено
Нік Цзянь

4
Відмінний анс! Серйозно!
zeekhuge

3
Гммм, мені все це звучить як те, що ми, колись таймери, називали глобальними змінними, на що сильно нахмурилися, коли орієнтація об’єкта вийшла на сцену 8-)
Ульф Едгольм

Отже, контекст, який я отримую від getApplicationContext, це такий же, як getContext в діяльності?
JPM

119

Контекст - це ручка до системи; він надає такі послуги, як вирішення ресурсів, отримання доступу до баз даних та налаштувань тощо. У додатку для Android є діяльність. Контекст - це як ручка до середовища, у якому зараз працює ваша програма. Об'єкт діяльності успадковує об'єкт контексту.

Для отримання додаткової інформації дивіться у вступі до розробки Android з Android Studio - Підручник .


88

Contextє "інтерфейсом" до глобальної інформації про прикладне середовище. На практиці Contextце насправді абстрактний клас , реалізацію якого забезпечує система Android.

Він дозволяє отримати доступ до ресурсів і класів, що стосуються додатків, а також до викликів операцій на рівні додатків, таких як запуск діяльності, трансляція та отримання намірів тощо.

На наступному малюнку ви можете бачити ієрархію класів, де Contextзнаходиться кореневий клас цієї ієрархії. Зокрема, варто підкреслити, що Activityце нащадок Context.

Діаграма діяльності


як це фото генерується?
d0ye

70

Що Contextсаме?

Відповідно до довідкової документації на Android, це об'єкт, який представляє різні дані про середовище. Він забезпечує доступ до локальних файлів, баз даних, навантажувачів класів, пов'язаних із середовищем, служб (включаючи послуги на рівні системи) тощо. У цій книзі та в щоденному кодуванні Android ви бачите, що Контекст часто проходить навколо.

З книги " Android на практиці ", с. 60.

Для декількох API для API потрібен Contextпараметр

Якщо ви подивитеся на різні Android API, ви помітите, що багато з них беруть android.content.Contextоб’єкт за параметр. Ви також побачите, що діяльність або послуга зазвичай використовується як Context. Це працює, тому що обидва ці класи походять від Context.


52

Простий приклад для розуміння contextв android:

У кожного начальника є помічник для догляду, виконання всіх менш важливих і трудомістких завдань. Якщо потрібна напилка або чашка кави, помічник помічників. Деякі начальники ледь знають, що відбувається в офісі, тому вони запитують своїх помічників щодо цього теж. Вони роблять певну роботу самі, але для більшості інших речей їм потрібна допомога помічників.

У цьому сценарії

Boss - це додаток Android

Асистент - це контекст

Файли / чашка кави - це ресурси

Ми зазвичай називаємо контекст, коли нам потрібно отримати інформацію про різні частини нашого додатку, такі як Діяльність, Програми тощо.

Деякі операції (речі, де потрібен помічник), де задіяний контекст:

  • Завантаження загальних ресурсів
  • Створення динамічних поглядів
  • Відображення тостів
  • Запуск заходів тощо.

Різні способи отримання контексту:

getContext()

getBaseContext()

getApplicationContext()

this

47

Контекст Android - це інтерфейс (у загальному розумінні, не в сенсі Java; в Java - Contextце фактично абстрактний клас!), Який дозволяє отримати доступ до конкретних ресурсів програми та класу та інформації про середовище програми.

Якби ваш додаток для Android був веб-додатком, ваш контекст був би чимось подібним до ServletContext(я не роблю тут точного порівняння).

Ваша діяльність та послуги також розширюються Context, тому вони успадковують усі ці методи доступу до інформації про навколишнє середовище, в якій працює додаток.


35
  • Context являє собою ручку для отримання даних про навколишнє середовище.
  • Context Сам клас оголошено абстрактним, реалізацію якого забезпечує ОС Android.
  • Context це як віддалений від телевізора та каналу телевізор - це ресурси, послуги тощо. введіть тут опис зображення

Що ти можеш з цим зробити?

  • Завантаження ресурсу.
  • Запуск нової діяльності.
  • Створення поглядів.
  • Отримання системного обслуговування.

Способи отримання контексту:

  • getApplicationContext()
  • getContext()
  • getBaseContext()введіть тут опис зображеннявведіть тут опис зображення

18

Просто виставивши його там для новачків;

Отже, спочатку зрозумійте контекст слова:

В англійській мові. це означає:

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

"Частини чогось написаного чи вимовленого, які негайно передують і слідують за словом чи уривком, і уточнюють його значення".

Тепер покладіть те саме розуміння на світ програмування:

контекст поточного стану програми / об'єкта. Це дозволяє новоствореним об’єктам зрозуміти, що відбувається. Зазвичай ви телефонуєте йому, щоб отримати інформацію про іншу частину вашої програми (діяльність, пакет / додаток)

Контекст можна отримати за допомогою виклику getApplicationContext(), getContext(), getBaseContext()або this(коли в класі активності).

Щоб отримати контекст будь-де в додатку, використовуйте такий код:

Створіть новий клас 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;
    }
}

Тепер будь-коли, коли вам потрібно контекст програми у класі неактивності, зателефонуйте цьому методу та у вас є контекст програми.

Сподіваюся, що це допоможе;)


17

Подумайте про це як про випускну машину, яка відмітила процес, до якого запущено додаток або послугу. Оброблене середовище має доступ до ряду базової системної інформації та певних дозволених ресурсів. Вам потрібен цей контекст, щоб потрапити на ці служби.


17

Контекст - це посилання на поточний об'єкт. Також контекст дозволяє отримати доступ до інформації про середовище програми.


13

Клас android.content.Context забезпечує підключення до системи Android та ресурси проекту. Це інтерфейс до глобальної інформації про прикладне середовище.

Контекст також забезпечує доступ до служб Android, наприклад, до служби локації.

Діяльність та послуги розширюють Contextклас.


9

Контекст - екземпляри класу android.content.Context забезпечують підключення до системи Android, яка виконує програму. Наприклад, ви можете перевірити розмір відображення поточного пристрою за допомогою контексту.

Це також дає доступ до ресурсів проекту. Це інтерфейс до глобальної інформації про прикладне середовище.

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

Діяльність та послуги поширюють клас контексту. Тому їх можна безпосередньо використовувати для доступу до контексту.


9

Контекст - це інтерфейс до глобальної інформації про середовище програми. Це абстрактний клас, реалізація якого забезпечується Androidсистемою.

Context дозволяє отримати доступ до ресурсів та класів, що стосуються додатків, а також виклики для операцій на рівні додатків, таких як launching activities, broadcasting and receiving intents, etc.

Ось приклад

 public class MyActivity extends Activity {

      public void Testing() {

      Context actContext = this; /*returns the Activity Context since   Activity extends Context.*/

      Context appContext = getApplicationContext();    /*returns the context of the single, global Application object of the current process. */

      Button BtnShowAct1 = (Button) findViewById(R.id.btnGoToAct1);
      Context BtnContext = BtnShowAct1.getContext();   /*returns the context of the View. */

Для отримання більш детальної інформації ви можете відвідати http://developer.android.com/reference/android/content/Context.html


8

Контекст - це в основному доступ до ресурсів та отримання деталей про середовище програми (для контексту програми) або діяльності (для контексту діяльності) або будь-якого іншого ...

Щоб уникнути витоку пам’яті, слід використовувати контекст програми для всіх компонентів, яким потрібен контекстний об’єкт .... для більшого клацання тут


8

Контекст - це контекст поточного стану програми / об'єкта. Він є об'єктом, який представляє різні дані середовища. Контекст допомагає поточній діяльності взаємодіяти із зовнішнім середовищем Android, наприклад, локальними файлами, базами даних, класовими навантажувачами, пов’язаними із середовищем, сервісами, що включають послуги на рівні системи тощо.

Контекст - це ручка для системи. Він надає такі послуги, як вирішення ресурсів, отримання доступу до баз даних та налаштувань тощо. У додатку для Android є діяльність. Це як ручка до середовища, у якому зараз працює ваша програма. Об'єкт діяльності успадковує об'єкт контексту.

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


7

Контекст означає, що Android дізнається про те, в якій діяльності я повинен зайнятися чи діяти.

1 - Toast.makeText(context, "Enter All Details", Toast.LENGTH_SHORT).show(); це використовується в цьому. Context context = ActivityName.this;

2 -startActivity(new Intent(context,LoginActivity.class));

в цьому контексті означає, з якої діяльності ви хочете перейти до іншої діяльності. контекст або ActivityName.this швидше, getContext і getApplicatinContext.


6

A Contextце те, що більшість із нас назвали б Application . Він створений системою Android і здатний робити лише те, що вміє програма. У Tomcat контекст - це також те, що я би назвав додатком.

Є один контекст, який містить багато заходів, кожна діяльність може мати багато переглядів.

Очевидно, хтось скаже, що це не підходить через те чи інше, і вони, ймовірно, вірні, але сказати, що контекст - це ваша поточна програма, допоможе вам зрозуміти, що ви вводите в параметри методу.


6

Аналогія боса

Давайте маємо невелику аналогію перед зануренням у глибину технічності контексту

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

Тож ось
Бос -
Асистент додатків для Android -
Файл контексту чи чашка кави - Ресурс

Що говорить офіційний сайт розробника Android про Context

Контекст - це точка доступу до ресурсів, пов’язаних із додатками

Давайте подивимось деякі такі ресурси чи завдання

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

  • Отримання абсолютного шляху до каталогу кешу додатків у файловій системі.

  • Визначення того, чи дозволений даний дозвіл для певного процесу та ідентифікатора користувача, що працює в системі.

  • Перевірка, чи вам надано певний дозвіл.

І так далі.
Отже, якщо додаток Android хоче розпочати діяльність, це переходить безпосередньо доContext (точка доступу), і Contextклас повертає йому ресурси (Намір у цьому випадку).

Як і будь-який інший клас Contextкласу, також є поля та методи.
Ви можете дізнатися більше про Contextофіційну документацію, вона охоплює майже все, доступні методи, поля і навіть як використовувати поля з методами.


спасибі за голову вгору @dhssa. Я намагався надати суті документів Android. Я повинен був бути більш уважним. Видалено "скопійовану" частину
Рохіт Сінгх

5

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

Це також дає доступ до ресурсів проекту. Це інтерфейс до глобальної інформації про прикладне середовище.

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

Діяльність та послуги поширюють клас контексту. Тому їх можна безпосередньо використовувати для доступу до контексту.


4

Якщо ви хочете підключити Контекст до інших знайомих класів в Android, пам’ятайте про цю структуру:

Контекст <ContextWrapper <Додаток

Контекст <ContextWrapper <ContextThemeWrapper <Діяльність

Контекст <ContextWrapper <ContextThemeWrapper <Діяльність <СписокActivity

Контекст <ContextWrapper <Сервіс

Контекст <ContextWrapper <Сервіс <IntentService

Отже, всі ці заняття по-своєму є контекстами. Якщо ви хочете, ви можете передавати Service та ListActivity в контекст . Але якщо придивитись уважно, деякі класи також успадковують тему. У діяльності чи фрагменті ви хочете, щоб їх тематику було застосовано до ваших поглядів, але це не стосується , наприклад, класу обслуговування .

Я пояснюю різницю в контекстах тут .


4

Простіше кажучи, Андроїди Context- це безлад, який ви не полюбите, поки не перестанете хвилюватися.

Android Contexts:

  • Бог-об’єкти.

  • Це означає, що ви хочете обходити всі свої програми, коли ви починаєте розробляти для Android, але уникнете цього, коли ви трохи наблизиться до програмування, тестування та самого Android.

    • Неясна залежність.

    • Поширене джерело витоку пам'яті.

    • PITA для тестування.

  • Фактичний контекст, який використовується системою Android для розсилки дозволів, ресурсів, уподобань, служб, трансляцій, стилів, показу діалогів та надувного макета. І вам потрібні різні Contextекземпляри для окремих речей (очевидно, ви не можете показати діалогове вікно з контексту програми чи послуги; макети, завищені від контексту програми та діяльності, можуть відрізнятися).


4

Контекст андроїда конкретних апі для кожної програми-s пісочниці , яка забезпечує доступ додатки особисті дані , таку як до ресурсів, баз даних, приватним filedirectories, перевагу, настройка ...

Більшість приватних даних однакові для всіх заходів / служб / трансляторів однієї програми.

Оскільки Application, Activity, Service реалізують інтерфейс контексту, вони можуть бути використані там, де для виклику api потрібен параметр контексту


4

Contextозначає компонент (або застосування) в різні часові періоди. Якщо я з'їдаю стільки їжі від 1 до 14 вечора, то мій контекст того часу використовується для доступу до всіх методів (або ресурсів), якими я користуюсь за цей час. Вміст є компонентом (додатком) на певний час. Contextкомпоненти компонентів програми постійно змінюються на основі базового життєвого циклу компонентів або програми. Наприклад, всередині onCreate () для Activity,

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

Примітка: <application>вміщує всі Android-компоненти.

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

    <service>  .. </service>

    <receiver> .. </receiver>

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

Це означає, що коли ви телефонуєте getApplicationContext()зсередини будь-якого компонента, ви викликаєте загальний контекст усієї програми.

Context продовжує модифікуватися системою на основі життєвого циклу компонентів.


1

Подумайте про контекст як прапорець з різними ресурсами: рядком, кольорами та шрифтами. Якщо вам потрібен ресурс, ви переходите до цього поля. Коли ви обертаєте екран, це поле змінюється, оскільки орієнтація змінюється на пейзаж.


0

 Contextозначає струм. Contextвикористовувати для виконання операції для поточного екрана. колишній
  1. getApplicationContext ()
  2. getContext ()

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


-7

У Java ми кажемо, що це ключове слово стосується стану поточного об'єкта програми.
Аналогічно, в альтернативному варіанті у нас є ContextAndroid Development.

Це можна визначити явно або неявно,

Context con = this;

getApplicationContext();

getBaseContext();

getContext();

Я можу бути просто об'єктом поточної діяльності, я думаю. Я використовую це так, ніби так було кілька разів.
Огіовр

1
Існує велика різноманітність способів отримати контекст. Виклик thisпрацює лише в діяльності. Контекст не є альтернативою "цьому" - контекст використовується для доступу до функцій системи та багато іншого. Ви надто спрощуєте контекст і не вистачаєте головного моменту в ньому.
Зої

-10

Цей атрибут оголошує, з якою діяльністю пов’язано цю компоновку за замовчуванням .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.