Должен ли я использовать getApplicationContext или Activity.это в долгосрочной перспективе AsyncTask - программирование

Должен ли я использовать getApplicationContext или Activity.это в долгосрочной перспективе AsyncTask

У меня длинная работа Async Task, которая отправляет некоторые данные на мой сервер, а затем останавливается. Весь процесс может включать несколько запросов и ответ. Я должен читать данные из базы данных, отправлять ее и обрабатывать ответ и обновлять мою базу данных соответственно. Я использую контент-провайдеров для чтения и обновления данных из базы данных.

Теперь, чтобы использовать Content Provider, я должен вызвать метод getContentResolver() в контексте. Поэтому мне интересно, нужно ли мне использовать getApplicationContext или просто передать Activity.this моим методам.

Я видел несколько сообщений как это, объясняя разницу между ними, и в большинстве из них они советуют нам не использовать getApplicationContext, если это возможно. Хотя я не хочу, чтобы мой AsyncTask терял контекст из Activity.this, когда Activity уничтожается или изменяется ориентация. Поэтому мне интересно, могу ли я использовать getApplicationContext в моем случае или будет использовать Activity.this для моего требования.

4b9b3361

Ответ 1

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

Когда вы используете контекст для изменения пользовательского интерфейса, вы должны использовать контекст Activity, так как в некоторых случаях использование контекста приложения может вызвать исключение (как описано здесь и здесь). Например, в следующем случае:

TextView senderNameTextView = new TextView(getApplicationContext());

Когда вы используете контекст при использовании кросс-активности, вы не должны привязывать контекст Activity к действию, так как тогда даже если действие будет уничтожено, оно не будет собрано в мусор, поскольку оно все еще ссылается на выполняемой задачи. В таких случаях вы должны использовать контекст приложения. См. статью на сайте разработчика Android (написано Romain Guy) еще больше подробности.

Если вы используете контекст для вызова getContentResolver, вы должны использовать контекст приложения.