
O que é contexto?
Como o nome indica, este é o contexto do estado atual do aplicativo ou objeto. Isso permite que objetos recém-criados entendam o que está acontecendo. Geralmente eles ligam para ele para obter informações sobre outra parte do programa.
Além disso, o Context
é um guia para o sistema, pode fornecer recursos, acessar bancos de dados, preferências, etc. Aplicativos Android também têm Activity
. É como explorar o ambiente em que seu aplicativo está sendo executado. Um objeto Activity
herda um objeto Context
. Permite acessar recursos e informações específicos sobre o ambiente do aplicativo.
Context
presente em quase todos os lugares em um aplicativo Android e é a parte mais importante; portanto, você precisa entender como usá-lo corretamente.
O uso inadequado do Context
pode facilmente levar a vazamentos de memória no aplicativo Android.
Existem muitos tipos diferentes de contextos, então vamos descobrir o que é cada um deles, como e quando usá-los corretamente.
Contexto do aplicativo
Essa é uma instância singleton (a única em todo o aplicativo) e pode ser acessada através da getApplicationContext()
. Esse contexto está vinculado ao ciclo de vida do aplicativo. Um contexto de aplicativo pode ser usado onde você precisa de um contexto cujo ciclo de vida não esteja relacionado ao contexto atual ou quando precisa passar o contexto para fora da Activity
.
Por exemplo, se você precisar criar um objeto singleton para seu aplicativo, e esse objeto precisar de algum contexto, sempre use o contexto do aplicativo.
Se você passar um contexto de Activity
nesse caso, isso levará a um vazamento de memória, pois um objeto singleton manterá uma referência à Activity
e não será destruído pelo coletor de lixo quando necessário.
No caso de você precisar inicializar uma biblioteca em uma Activity
, sempre passe no contexto do aplicativo, não no contexto da Activity
.
Portanto, getApplicationContext()
deve ser usado quando se sabe que você precisa de um contexto para algo que possa viver mais do que qualquer outro contexto que você tenha à sua disposição.
Contexto da Atividade
Esse contexto é acessível em Activity
e é anexado ao seu ciclo de vida. Um contexto de Activity
deve ser usado quando você passa um contexto dentro de uma Activity
ou precisa de um contexto cujo ciclo de vida esteja vinculado ao contexto atual.
getContext () no ContentProvider
Esse contexto é o contexto do aplicativo e pode ser usado de maneira semelhante ao contexto do aplicativo. Pode ser acessado através do método getContext()
.
Quando não é possível usar getApplicationContext ()?
- Este não é um contexto completo que suporta tudo o que uma
Activity
pode fazer. Algumas coisas que você tenta fazer com esse contexto falham, principalmente relacionadas à GUI. - Podem ocorrer vazamentos de memória se o contexto de
getApplicationContext()
mantido em algum objeto que você não limpará mais tarde. Se o contexto da Activity
for mantido em algum lugar, assim que a Activity
destruída pelo coletor de lixo, todo o resto também será destruído. O objeto Application
permanece durante toda a vida do seu processo.
Regra prática
Na maioria dos casos, use um contexto acessível diretamente do componente em que você está trabalhando no momento. Você pode armazenar com segurança um link para ele se ele não exceder o ciclo de vida desse componente. Assim que você precisar salvar o link no contexto em um objeto que mora fora da sua Activity
ou outro componente, mesmo que temporariamente, use o link no contexto do aplicativo.