Toast и Intent требуют ссылки на контекст . И getApplication , getApplicationContext , LoginActivity.this и getBaseContext , все они предлагают ссылку на контекст.
Теперь смущает объявление разных контекстов и их конкретное использование. Чтобы упростить задачу, вы должны посчитать два типа контекста, доступных в платформе Android.
- Контекст приложения
- Контекст деятельности
Контекст приложения привязан к жизненному циклу приложения и всегда остается неизменным на протяжении всего жизненного цикла приложения. Итак, если вы используете Toast , вы можете использовать контекст приложения или даже контекст активности (оба), потому что тост может быть поднят из любого места в вашем приложении и не привязан к окну.
Активность контекста прилагается к жизненному циклу своей деятельности и может быть уничтожен , если данный вид деятельности onDestroy()
повышается. Если вы хотите запустить новое действие, вам необходимо использовать контекст действия в его намерении, чтобы новое действие запуска было связано с текущим действием (с точки зрения стека действий). Однако вы также можете использовать контекст приложения для запуска нового действия, но тогда вам нужно установить флаг, Intent.FLAG_ACTIVITY_NEW_TASK
чтобы рассматривать его как новую задачу.
Теперь по поводу ваших дел:
LoginActivity.this
хотя это относится к вашему собственному классу, который расширяет класс Activity, но базовый класс (Activity) также расширяет класс Context, поэтому его можно использовать для предложения контекста активности.
getApplication()
хотя он ссылается на объект Application, но класс Application расширяет класс Context, поэтому его можно использовать для предложения контекста приложения.
getApplicationContext()
предлагает контекст приложения.
getBaseContext()
предлагает контекст деятельности.
Подсказки: всякий раз, когда вам нужно манипулировать, Views
переходите к
Activity-Context , иначе Application-Context будет достаточно.