У чому різниця між активністю та контекстом?


92

Діяльність та контекст однакові, чи існують відмінності?

Коли мені повинен метод передавати Activity, а коли Context?


@Egor Thnx, і я потурбуюсь про це .. перед тим, як задавати питання ... чи можеш ти мені допомогти ще в одному питанні .. у чому полягає коріння всієї діяльності в android
Android

будь ласка, перегляньте обговорення нижче, щоб очистити питання
Єгор

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

Відповіді:


118

Наскільки я розумію: контекст - це базовий об’єкт. Отже, кожна діяльність, подібна до програми, походить від контексту. Це означає, що кожна діяльність та кожна ApplicationІС є Context;

З developer.android.com Діяльності

java.lang.Objectandroid.content.Contextandroid.content.ContextWrapperandroid.view.ContextThemeWrapperandroid.app.Activity

І застосування

java.lang.Objectandroid.content.Contextandroid.content.ContextWrapperandroid.app.Application

Контекст програми триває, доки ваш додаток живий, тоді як контекст Activity помирає разом з вашим Activity (він не діє після onDestroyцієї активності).

Отже, якщо вам потрібен контекст між діяльністю (тобто в Singleton), вам буде краще використовувати контекст програми.

Зазвичай для методів Android Framework, де очікується контекст, немає різниці, який саме ви передасте. Але завжди пам’ятайте про MemoryLeaks, якщо ви зберігаєте довгоживучі посилання на контекст


2
Так, вибачте, я перевірив посилання, дійсно Context - це суперклас Activity. У будь-якому випадку, не зовсім правильно говорити, що Activity - це контекст, Activity - це більш складний об’єкт, тоді як Context - це просто блок, який зберігає інформацію та надає доступ до ресурсів.
Єгор

@Rafael T Thnx за правильну відповідь
Android

17
цілком правильно, якщо я посилаюся на об’єктно-орієнтовані мови: кожен об’єкт у Java походить від Object.class, тож НА ФАКТІ все Є об’єктом. Якщо бути більш конкретним: Активність - це спеціалізація контексту. Якщо у мене є Абстрактний клас Тварина та два класи, які походять від Тварини (Кіт, Собака), ці два принаймні Тварини. Скрізь, де потрібна тварина, ви добре передаєте котів чи собак, оскільки це те саме для контексту! Будь ласка, підтвердьте інформацію, перш ніж проголосувати за мене
Рафаель Т.

1
"Контекст активності триває, поки ваш додаток живий, тоді як контекст активності вмирає разом з вашою активністю", здається, вимкнено. Чи не повинен першим бути контекст програми ?
Перший

8

Як ви можете бачити в документі Android :

Клас Activity поширюється від "ContextThemeWrapper", а цей - від "ContextWrapper", а той - від "Context".

Так, так, Активність розширює контекст!

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