Тост і Намір вимагають посилання на контекст . І getApplication , getApplicationContext , LoginActivity.this та getBaseContext , усі вони пропонують посилання на контекст.
Тепер річ плутається в оголошенні різних контекстів та їх конкретного використання. Щоб зробити простішими, вам слід порахувати два типи контексту, доступні в рамках Android.
- Контекст програми
- Контекст діяльності
Контекст програми додається до життєвого циклу програми і завжди буде однаковим протягом усього життя програми. Отже, якщо ви використовуєте Toast , ви можете використовувати контекст програми або навіть контекст діяльності (обидва), оскільки тост можна піднімати з будь-якого місця у вашій програмі і не прикріплений до вікна.
Контекст діяльності приєднаний до життєвого циклу діяльності та може бути зруйнований, якщо активність onDestroy()
буде підвищена. Якщо ви хочете запустити нову діяльність, вам потрібно використовувати контекст діяльності в її намірі, щоб нова активізація запуску була пов'язана з поточною діяльністю (з точки зору стеку активності). Однак ви можете також використовувати контекст програми для запуску нової діяльності, але тоді вам потрібно встановити прапор, Intent.FLAG_ACTIVITY_NEW_TASK
щоб розглянути його як нове завдання.
Тепер посилаємось на ваші випадки:
LoginActivity.this
хоча його посилання на ваш власний клас, який розширює клас активності, але базовий клас (активність) також розширює клас контексту, тому його можна використовувати для пропонування контексту діяльності.
getApplication()
хоча його посилання на об’єкт Application, але клас Application розширює клас контексту, тому його можна використовувати для пропонування контексту програми.
getApplicationContext()
пропонує контекст програми.
getBaseContext()
пропонує контекст діяльності.
Поради: Щоразу, коли вам потрібно буде маніпулювати, Views
тоді перейдіть до
Activity-Context , інакше Application-Context буде достатньо.