Должен ли я использовать getApplicationContext или Activity.это в долгосрочной перспективе AsyncTask
У меня длинная работа Async Task, которая отправляет некоторые данные на мой сервер, а затем останавливается. Весь процесс может включать несколько запросов и ответ. Я должен читать данные из базы данных, отправлять ее и обрабатывать ответ и обновлять мою базу данных соответственно. Я использую контент-провайдеров для чтения и обновления данных из базы данных.
Теперь, чтобы использовать Content Provider, я должен вызвать метод getContentResolver()
в контексте. Поэтому мне интересно, нужно ли мне использовать getApplicationContext
или просто передать Activity.this
моим методам.
Я видел несколько сообщений как это, объясняя разницу между ними, и в большинстве из них они советуют нам не использовать getApplicationContext
, если это возможно. Хотя я не хочу, чтобы мой AsyncTask
терял контекст из Activity.this
, когда Activity
уничтожается или изменяется ориентация. Поэтому мне интересно, могу ли я использовать getApplicationContext
в моем случае или будет использовать Activity.this
для моего требования.
Ответы
Ответ 1
Существует причина для использования каждого из параметров.
Когда вы используете контекст для изменения пользовательского интерфейса, вы должны использовать контекст Activity, так как в некоторых случаях использование контекста приложения может вызвать исключение (как описано здесь и здесь). Например, в следующем случае:
TextView senderNameTextView = new TextView(getApplicationContext());
Когда вы используете контекст при использовании кросс-активности, вы не должны привязывать контекст Activity к действию, так как тогда даже если действие будет уничтожено, оно не будет собрано в мусор, поскольку оно все еще ссылается на выполняемой задачи. В таких случаях вы должны использовать контекст приложения. См. статью на сайте разработчика Android (написано Romain Guy) еще больше подробности.
Если вы используете контекст для вызова getContentResolver
, вы должны использовать контекст приложения.