Как определить правильный контекст для использования в разных случаях (Toast.makeText, context.getSharedPreferences и т. д.)

Я подумал, есть ли способ определить, какой контекст лучше всего передать таким методам, как Toast.makeText(), или при получении SharedPreferences, как с context.getSharedPreferences().. Есть ли причина не всегда использовать Контекст приложения на месте? из Activity или IntentService контекстов, например?


person Gianni Costanzi    schedule 05.09.2012    source источник


Ответы (1)


Чтобы объяснить разницу, скопировано из https://stackoverflow.com/a/4128799/1143977.

Оба они являются экземплярами Context, но экземпляр приложения привязан к жизненному циклу приложения, а экземпляр Activity привязан к жизненному циклу Activity. Таким образом, они имеют доступ к различной информации о среде приложения.

Если вы читаете документы в getApplicationContext, там отмечается, что вы должны использовать это только в том случае, если вам нужен контекст, жизненный цикл которого отделен от текущего контекста.

Контекст действия предположительно содержит некоторую информацию о текущем действии, необходимую для выполнения этих вызовов. Если вы покажете точное сообщение об ошибке, возможно, вы сможете указать, что именно ему нужно.

Но в целом используйте контекст активности, если у вас нет веской причины не делать этого.

person VendettaDroid    schedule 05.09.2012
comment
Они утверждают обратное в Блоге разработчиков Android, т.е. старайтесь избегать контекста активности и вместо этого используйте контекст приложения. - person Gianni Costanzi; 06.09.2012
comment
ИМО, я думаю, что они пытаются сказать, что если вы планируете иметь контекст для долгой жизни объекта, тогда контекст приложения - хорошая идея. Они говорят нам избегать контекста активности только в этом случае. В то время как в моем понимании вы можете использовать контекст активности для отдыха. - person VendettaDroid; 06.09.2012