Na programação do Android, o que exatamente é uma Context
classe e para que é usada?
Eu li sobre isso no site do desenvolvedor , mas não consigo entendê-lo claramente.
android
android-context
Brigadeiro
fonte
fonte
Respostas:
Simplificando:
Como o nome sugere, é o contexto do estado atual do aplicativo / objeto. Ele permite que objetos recém-criados entendam o que está acontecendo. Normalmente, você o chama para obter informações sobre outra parte do seu programa (atividade e pacote / aplicativo).
Você pode obter o contexto invocando
getApplicationContext()
,getContext()
,getBaseContext()
outhis
(quando em uma classe que se estende desdeContext
, tais como a aplicação, Actividade, classes de serviço e IntentService).Usos típicos do contexto:
Criando novos objetos : Criando novas visualizações, adaptadores, ouvintes:
Acessando recursos comuns padrão : Serviços como LAYOUT_INFLATER_SERVICE, SharedPreferences:
Acessando componentes implicitamente : em relação aos provedores de conteúdo, transmissões, intenção
fonte
context.getSystemService(LAYOUT_INFLATER_SERVICE)
, onde e como écontext
definido?Definição de Contexto
Termos mais simples (exemplo 1)
Considere Person-X é o CEO de uma empresa de software iniciante.
Há um arquiteto principal presente na empresa, esse arquiteto principal faz todo o trabalho na empresa, que envolve, como banco de dados, interface do usuário etc.
Agora, o CEO contrata um novo desenvolvedor.
É o arquiteto que diz à responsabilidade do recém-contratado, com base nas habilidades do novo funcionário, que ele trabalhará no banco de dados ou na interface do usuário, etc.
Termos mais simples (exemplo 2)
É como o acesso da atividade do Android ao recurso do aplicativo.
É semelhante a quando você visita um hotel, quer café da manhã, almoço e jantar nos horários adequados, certo?
Há muitas outras coisas que você gosta durante a estadia. Como você consegue essas coisas?
Você pede à pessoa do serviço de quarto que traga essas coisas para você.
Aqui a pessoa do serviço de quarto é o contexto, considerando que você é a única atividade e o hotel como seu aplicativo; finalmente, o café da manhã, o almoço e o jantar devem ser os recursos.
Coisas que envolvem contexto são:
Contexto é a classe base para Atividade , Serviço , Aplicativo , etc.
Outra maneira de descrever isso: considere o contexto como remoto de uma TV e canal na televisão são recursos, serviços, usando intenções etc. - - - Aqui, o controle remoto atua como um acesso para obter acesso a todos os diferentes recursos em primeiro plano.
Portanto, o Remote tem acesso a canais como recursos, serviços, uso de intenções etc.
Da mesma forma ... Quem tem acesso remoto, naturalmente, tem acesso a tudo, como recursos, serviços, uso de intenções etc.
Diferentes métodos pelos quais você pode obter contexto
getApplicationContext()
getContext()
getBaseContext()
this
(quando na classe de atividade)Exemplo:
A palavra-chave
this
refere-se ao contexto da atividade atual.fonte
getApplicationContext()
,getContext()
,getBaseContext()
..... Consulte this -> ( stackoverflow.com/a/10641257 )SomeActivityName.this
. EM uma rosca para um exemplo,this
refere-se a teh rosca e não a actividadeFonte
O tópico do Contexto no Android parece confuso para muitos. As pessoas sabem que o Contexto é necessário com frequência para fazer coisas básicas no Android. Às vezes, as pessoas entram em pânico porque tentam executar alguma operação que requer o contexto e não sabem como obter o contexto certo. Vou tentar desmistificar a ideia de contexto no Android. Um tratamento completo do problema está além do escopo deste post, mas tentarei fornecer uma visão geral para que você tenha uma noção do que é o contexto e como usá-lo. Para entender o que é contexto, vamos dar uma olhada no código fonte:
https://github.com/android/platform_frameworks_base/blob/master/core/java/android/content/Context.java
O que exatamente é o contexto?
Bem, a própria documentação fornece uma explicação bastante direta: A classe Context é uma "Interface para informações globais sobre um ambiente de aplicativos".
A própria classe Context é declarada como classe abstrata, cuja implementação é fornecida pelo sistema operacional Android. A documentação fornece ainda que o Contexto “… permite acesso a recursos e classes específicos de aplicativos, bem como chamadas para operações no nível de aplicativos, como atividades de lançamento, transmissão e recebimento de intenções, etc.".
Você pode entender muito bem agora, por que o nome é Contexto. É porque é só isso. O Contexto fornece o link ou gancho, se você desejar, para uma Atividade, Serviço ou qualquer outro componente, vinculando-o ao sistema, permitindo acesso ao ambiente global de aplicativos. Em outras palavras: o contexto fornece a resposta para a pergunta dos componentes: "onde diabos estou em relação ao aplicativo em geral e como faço para acessar / me comunicar com o restante do aplicativo?" Se tudo isso parecer um pouco confuso, uma rápida olhada nos métodos expostos pela classe Context fornece algumas pistas adicionais sobre sua verdadeira natureza.
Aqui está uma amostra aleatória desses métodos:
getAssets()
getResources()
getPackageManager()
getString()
getSharedPrefsFile()
O que todos esses métodos têm em comum? Todos permitem que quem tem acesso ao Contexto possa acessar recursos de todo o aplicativo.
O contexto, em outras palavras, conecta o componente que tem uma referência ao restante do ambiente do aplicativo. Os ativos (pasta 'pensar / ativos' no seu projeto), por exemplo, estão disponíveis no aplicativo, desde que uma Atividade, Serviço ou qualquer outra coisa que saiba acessar esses recursos. O mesmo vale para
getResources()
que permite fazer coisas como ogetResources().getColor()
que o conectará aocolors.xml
recurso (esqueça que o aapt permite o acesso a recursos via código java, isso é uma questão separada).O resultado é que
Context
é o que permite o acesso aos recursos do sistema e é o que prende os componentes ao "aplicativo maior". Vejamos as subclasses dasContext
classes que fornecem a implementação daContext
classe abstrata . A classe mais óbvia é aActivity
classe.Activity
Herda fromContextThemeWrapper
, o que herda deContextWrapper
, o que herda deContext
si. Essas classes são úteis para entender as coisas em um nível mais profundo, mas por enquanto é suficiente conhecer essaContextThemeWrapper
eContextWrapper
são muito bonito o que soam como. eles implementar os elementos abstratos doContext
própria classe "agrupando" um contexto (o contexto real) e delegando essas funções a esse contexto.Um exemplo é útil - noContextWrapper
classe, o método abstratogetAssets
daContext
classe é implementado da seguinte maneira:mBase
é simplesmente um campo definido pelo construtor para um contexto específico. Portanto, um contexto éContextWrapper
agrupado e delega sua implementação do método getAssets para esse contexto. Vamos voltar a examinar aActivity
classe que finalmente herdaContext
para ver como tudo isso funciona.Você provavelmente sabe o que é uma Atividade, mas, para revisar, é basicamente 'uma única coisa que o usuário pode fazer. Ele cuida de fornecer uma janela na qual colocar a interface do usuário com a qual o usuário interage '. Desenvolvedores familiarizados com outras APIs e até mesmo não desenvolvedores podem pensar nisso de maneira vernacular como uma "tela". Isso é tecnicamente impreciso, mas não importa para nossos propósitos. Então, como
Activity
eContext
interagem eo que exatamente está acontecendo em seu relacionamento herança?Novamente, é útil olhar para exemplos específicos. Todos nós sabemos como iniciar atividades. Desde que você tenha "o contexto" a partir do qual você está iniciando a Atividade, basta ligar
startActivity(intent)
, onde o Intent descreve o contexto no qual você está iniciando uma Atividade e a Atividade que você deseja iniciar. Este é o familiarstartActivity(this, SomeOtherActivity.class)
.E o que é
this
?this
é sua atividade porque aActivity
classe herdaContext
. A informação completa é a seguinte: quando você ligastartActivity
, aActivity
classe executa algo como isto:Portanto, utiliza o
execStartActivity
daInstrumentation
classe (na verdade, de uma classe internaInstrumentation
chamadaActivityResult
).Neste ponto, estamos começando a dar uma olhada nos internos do sistema.
É aqui que o sistema operacional lida com tudo. Então, como a Instrumentação inicia a Atividade exatamente? Bem, o parâmetro
this
noexecStartActivity
método acima é sua Atividade, ou seja, o Contexto, eexecStartActivity
faz uso desse contexto.Uma visão geral de 30.000 é a seguinte: a classe Instrumentação mantém o controle de uma lista de atividades que está monitorando para fazer seu trabalho. Essa lista é usada para coordenar todas as atividades e garantir que tudo corra bem no gerenciamento do fluxo de atividades.
Existem algumas operações nas quais ainda não examinei completamente quais problemas de encadeamento e processo de coordenadas. Por fim, o
ActivityResult
usa uma operação nativa -ActivityManagerNative.getDefault().startActivity()
que usa oContext
que você passou quando ligoustartActivity
. O contexto que você passou é usado para ajudar na "resolução de intenção", se necessário. Resolução de intenção é o processo pelo qual o sistema pode determinar o destino da intenção, se não for fornecido. (Confira o guia aqui para mais detalhes).E para que o Android faça isso, ele precisa acessar as informações fornecidas por
Context
. Especificamente, o sistema precisa acessar umContentResolver
para que ele possa "determinar o tipo MIME dos dados da intenção". Todo esse processo sobre comostartActivity
fazer uso do contexto foi um pouco complicado e eu não entendo completamente os elementos internos. Meu ponto principal foi apenas para ilustrar como os recursos de todo o aplicativo precisam ser acessados para executar muitas das operações essenciais a um aplicativo.Context
É o que fornece acesso a esses recursos. Um exemplo mais simples pode ser o Views. Todos sabemos o que você cria. Visualização personalizada estendendoRelativeLayout
ou alguma outraView
classe, você deve fornecer um construtor que faça umaContext
como argumento. Quando você instancia sua Visualização personalizada, passa no contexto. Por quê? Porque o View precisa ter acesso a temas, recursos e outros detalhes de configuração do View. A configuração de visualização é realmente um ótimo exemplo. Cada contexto tem vários parâmetros (campos nasContext
implementações) que são definidos pelo próprio sistema operacional para itens como a dimensão ou densidade da exibição. É fácil ver por que essas informações são importantes para a configuração de Views etc.Uma palavra final: por algum motivo, pessoas novas no Android (e até pessoas não tão novas) parecem esquecer completamente a programação orientada a objetos quando se trata do Android. Por alguma razão, as pessoas tentam alterar seu desenvolvimento Android para paradigmas pré-concebidos ou comportamentos aprendidos.
O Android tem seu próprio paradigma e um certo padrão que é realmente bastante consistente se deixar de lado suas noções pré-concebidas e simplesmente ler a documentação e o guia do desenvolvedor. Meu argumento real, no entanto, enquanto “obter o contexto certo” pode às vezes ser complicado, as pessoas entram em pânico injustificadamente porque se deparam com uma situação em que precisam do contexto e pensam que não o têm. Mais uma vez, Java é uma linguagem orientada a objetos com um design de herança.
Você apenas "possui" o contexto dentro de sua Atividade porque sua própria atividade herda de Contexto. Não há mágica nisso (exceto todas as coisas que o sistema operacional faz por si só para definir vários parâmetros e "configurar" corretamente seu contexto). Portanto, deixando de lado os problemas de memória / desempenho (por exemplo, mantendo referências ao contexto quando você não precisa ou fazendo isso de uma maneira que tenha consequências negativas na memória, etc.), o contexto é um objeto como qualquer outro e pode ser contornado assim como qualquer POJO (Plain Old Java Object). Às vezes, você pode precisar fazer coisas inteligentes para recuperar esse contexto, mas qualquer classe Java comum que se estenda de nada além do próprio Objeto pode ser escrita de uma maneira que tenha acesso ao contexto; simplesmente exponha um método público que utiliza um contexto e, em seguida, use-o nessa classe, conforme necessário.
fonte
Um contexto é um identificador para o sistema; fornece serviços como resolver recursos, obter acesso a bancos de dados e preferências e assim por diante. Um aplicativo Android tem atividades. O contexto é como um identificador para o ambiente em que seu aplicativo está sendo executado. O objeto de atividade herda o objeto de Contexto.
Para obter mais informações, consulte Introdução ao desenvolvimento do Android com o Android Studio - Tutorial .
fonte
Context
é uma "interface" para as informações globais sobre um ambiente de aplicativo. Na prática,Context
é na verdade uma classe abstrata , cuja implementação é fornecida pelo sistema Android.Permite o acesso a recursos e classes específicos do aplicativo, bem como chamadas para operações no nível do aplicativo, como atividades de lançamento, transmissão e recebimento de intenções, etc.
Na figura a seguir, você pode ver uma hierarquia de classes, onde
Context
está a classe raiz dessa hierarquia. Em particular, vale ressaltar queActivity
é um descendente deContext
.fonte
O que
Context
exatamente?No livro " Android na Prática ", p. 60
Várias APIs do Android exigem um
Context
parâmetro asSe você examinar as várias APIs do Android, perceberá que muitas delas usam um
android.content.Context
objeto como parâmetro. Você também verá que uma Atividade ou um Serviço é geralmente usado como umContext
. Isso funciona porque essas duas classes se estendem deContext
.fonte
Exemplo simples de entender
context
no android:Todo chefe tem um assistente para cuidar, para executar todas as tarefas menos importantes e demoradas. Se for necessário um arquivo ou uma xícara de café, um assistente está fugindo. Alguns chefes mal sabem o que está acontecendo no escritório, então perguntam aos assistentes sobre isso também. Eles mesmos fazem algum trabalho, mas para a maioria das outras coisas precisam da ajuda de seus assistentes.
Neste cenário,
Chefe - é a aplicação Android
Assistente - é contexto
Arquivos / xícara de café - são recursos
Geralmente chamamos de contexto quando precisamos obter informações sobre diferentes partes de nosso aplicativo, como Atividades, Aplicativos etc.
Algumas operações (coisas em que o assistente é necessário) em que o contexto está envolvido:
Diferentes maneiras de obter contexto:
fonte
Um contexto Android é uma interface (no sentido geral, não no sentido Java; em Java,
Context
é na verdade uma classe abstrata!) Que permite o acesso a recursos específicos de aplicativos e classe e informações sobre o ambiente de aplicativos.Se o seu aplicativo para Android fosse um aplicativo da Web, seu contexto seria algo semelhante a
ServletContext
(não estou fazendo uma comparação exata aqui).Suas atividades e serviços também se estendem
Context
; portanto, eles herdam todos esses métodos para acessar as informações do ambiente em que o aplicativo está sendo executado.fonte
Context
representa um identificador para obter dados do ambiente.Context
A própria classe é declarada como abstrata, cuja implementação é fornecida pelo sistema operacional Android.Context
é como o controle remoto de uma TV e os canais da televisão são recursos, serviços etc.O que você pode fazer com isso?
Maneiras de obter contexto:
getApplicationContext()
getContext()
getBaseContext()
fonte
Apenas publicando para iniciantes;
Então, primeiro entenda o contexto da palavra:
Em inglês-lib. Isso significa:
Agora adote o mesmo entendimento para o mundo da programação:
contexto do estado atual do aplicativo / objeto. Ele permite que objetos recém-criados entendam o que está acontecendo. Normalmente, você o chama para obter informações sobre outra parte do seu programa (atividade, pacote / aplicativo)
Você pode obter o contexto chamando
getApplicationContext()
,getContext(), getBaseContext()
outhis
(quando na classe de atividade).Para obter o contexto em qualquer lugar no aplicativo, use o seguinte código:
Crie uma nova classe
AppContext
dentro do seu aplicativo AndroidAgora, sempre que desejar o contexto do aplicativo na classe sem atividade, chame esse método e você terá o contexto do aplicativo.
Espero que esta ajuda;)
fonte
Pense nisso como a VM que isolou o processo em que o aplicativo ou serviço está sendo executado. O ambiente isolado acessa várias informações subjacentes do sistema e alguns recursos permitidos. Você precisa desse contexto para acessar esses serviços.
fonte
Contexto é uma referência ao objeto atual como este. O contexto também permite acesso a informações sobre o ambiente do aplicativo.
fonte
A classe
android.content.Context
fornece a conexão com o sistema Android e os recursos do projeto. É a interface para informações globais sobre o ambiente do aplicativo.O contexto também fornece acesso aos Serviços Android, por exemplo, o Serviço de Localização.
Atividades e serviços estendem a
Context
aula.fonte
O contexto é Instâncias da classe android.content.Context fornece a conexão com o sistema Android que executa o aplicativo. Por exemplo, você pode verificar o tamanho da tela do dispositivo atual via Contexto.
Também fornece acesso aos recursos do projeto. É a interface para informações globais sobre o ambiente do aplicativo.
A classe Context também fornece acesso aos serviços Android, por exemplo, o gerenciador de alarmes para acionar eventos com base no tempo.
Atividades e serviços estendem a classe Context. Portanto, eles podem ser usados diretamente para acessar o contexto.
fonte
O contexto é uma interface para informações globais sobre um ambiente de aplicativo. É uma classe abstrata cuja implementação é fornecida pelo
Android
sistema.Context
permite acesso a recursos e classes específicos de aplicativos, bem como solicita operações no nível de aplicativos, comolaunching activities, broadcasting and receiving intents, etc.
Aqui está o exemplo
Para mais detalhes, visite http://developer.android.com/reference/android/content/Context.html
fonte
O contexto é basicamente para acessar recursos e obter os detalhes do ambiente do aplicativo (para o contexto do aplicativo) ou atividade (para o contexto da atividade) ou qualquer outro ...
Para evitar vazamento de memória, você deve usar o contexto do aplicativo para todos os componentes que precisam de um objeto de contexto ... para mais, clique aqui
fonte
O contexto é o contexto do estado atual do aplicativo / objeto. É uma entidade que representa vários dados do ambiente. O contexto ajuda a atividade atual a interagir com o ambiente Android externo, como arquivos locais, bancos de dados, carregadores de classes associados ao ambiente, serviços que incluem serviços no nível do sistema e muito mais.
Um contexto é um identificador para o sistema. Ele fornece serviços como resolução de recursos, obtenção de acesso a bancos de dados e preferências e assim por diante. Um aplicativo Android tem atividades. É como um identificador para o ambiente em que seu aplicativo está sendo executado. O objeto de atividade herda o objeto de Contexto.
Diferentes métodos de chamada pelos quais você pode obter o contexto 1. getApplicationContext (), 2. getContext (), 3. getBaseContext () 4. ou este (quando na classe de atividade).
fonte
Contexto significa que o Android sabe em qual atividade devo participar ou participar.
1 -
Toast.makeText(context, "Enter All Details", Toast.LENGTH_SHORT).show();
é usado nisso.Context context = ActivityName.this;
2 -
startActivity(new Intent(context,LoginActivity.class));
nesse contexto, significa de qual atividade você deseja ir para outra atividade. context ou ActivityName.this é mais rápido, getContext e getApplicatinContext.
fonte
A
Context
é o que muitos de nós chamaríamos de Aplicativo . É fabricado pelo sistema Android e pode fazer apenas o que um aplicativo é capaz. No Tomcat, um contexto também é o que eu chamaria de aplicativo.Há um contexto que contém muitas atividades, cada atividade pode ter muitas visualizações.
Obviamente, alguns dirão que não se encaixa por causa disso ou daquilo e provavelmente estão certos, mas dizer que um Contexto é seu aplicativo atual ajudará você a entender o que está colocando nos parâmetros do método.
fonte
Chefe Assistente Analogia
Vamos ter uma pequena analogia antes de mergulhar profundamente no tecnicismo do contexto
O que o site oficial do desenvolvedor Android diz sobre o Contexto
O contexto é seu ponto de acesso para recursos relacionados ao aplicativo
Vamos ver alguns desses recursos ou tarefas
Iniciando uma atividade.
Obtendo o caminho absoluto para o diretório de cache específico do aplicativo no sistema de arquivos.
Determinando se a permissão fornecida é permitida para um determinado processo e ID do usuário em execução no sistema.
Verificando se você recebeu uma permissão específica.
E assim por diante.
Portanto, se um aplicativo Android deseja iniciar uma atividade, ele vai direto para
Context
(Ponto de Acesso), e aContext
classe devolve os recursos (intenção neste caso).Como qualquer outra classe,
Context
também possui campos e métodos.Você pode explorar mais sobre a
Context
documentação oficial, que abrange praticamente tudo, métodos disponíveis, campos e até mesmo como usar campos com métodos.fonte
Instâncias da classe android.content.Context fornecem a conexão com o sistema Android que executa o aplicativo. Por exemplo, você pode verificar o tamanho da tela do dispositivo atual via Contexto.
Também fornece acesso aos recursos do projeto. É a interface para informações globais sobre o ambiente do aplicativo.
A classe Context também fornece acesso aos serviços Android, por exemplo, o gerenciador de alarmes para acionar eventos com base no tempo.
Atividades e serviços estendem a classe Context. Portanto, eles podem ser usados diretamente para acessar o contexto.
fonte
Se você deseja conectar o Context a outras classes familiares no Android, lembre-se desta estrutura:
Portanto, todas essas classes são contextos à sua maneira. Você pode converter Service e ListActivity em Contexto, se desejar. Mas se você olhar de perto, algumas das classes também herdam o tema. Em atividade ou fragmento, você gostaria que o tema fosse aplicado às suas visualizações, mas não se importa com isso Classe de serviço , por exemplo.
Eu explico a diferença de contexto aqui .
fonte
Simplificando, os Androids
Context
são uma bagunça que você não vai adorar até parar de se preocupar.Os Android
Context
são:Objetos de Deus.
A coisa que você deseja distribuir por todo o seu aplicativo quando estiver desenvolvendo para Android, mas evitará fazê-lo quando você se aproximar um pouco mais da programação, teste e do próprio Android.
Dependência pouco clara.
Fonte comum de vazamentos de memória.
PITA para teste.
Contexto real usado pelo sistema Android para enviar permissões, recursos, preferências, serviços, transmissões, estilos, mostrando diálogos e inflando o layout. E você precisa de
Context
instâncias diferentes para algumas coisas separadas (obviamente, não é possível mostrar uma caixa de diálogo a partir de um aplicativo ou contexto de serviço; layouts inflados a partir de contextos de aplicativo e atividade podem ser diferentes).fonte
O Contexto é a API específica do Android para a Sandbox de cada aplicativo que fornece acesso a dados privados do aplicativo, como recursos, banco de dados, diretórios de arquivos privados, preferências, configurações ...
A maioria dos dados privados é a mesma para todas as atividades / serviços / ouvintes de transmissão de um aplicativo.
Como Aplicativo, Atividade, Serviço implementam a interface Context, eles podem ser usados onde uma chamada da API precisa de um parâmetro Context
fonte
Context
significa componente (ou aplicativo) em vários períodos. Se eu comer tanta comida entre 13 e 14 horas, meu contexto será usado para acessar todos os métodos (ou recursos) que eu uso durante esse período. O conteúdo é um componente (aplicativo) para um horário específico.Context
dos componentes do aplicativo continua mudando com base no ciclo de vida subjacente dos componentes ou aplicativo. Por exemplo, dentro do onCreate () de umActivity
,getBaseContext()
- dá aocontext
doActivity
que está definido (criado) pelo construtor de atividade.getApplicationContext()
- fornece aContext
configuração (criada) durante a criação do aplicativo.Nota:
<application>
contém todos os componentes do Android.Isso significa que, quando você chama
getApplicationContext()
de dentro de qualquer componente, está chamando o contexto comum de todo o aplicativo.Context
continua sendo modificado pelo sistema com base no ciclo de vida dos componentes.fonte
Pense no contexto como uma caixa com diferentes recursos: sequência, cores e fontes. Se você precisar de um recurso, vá para esta caixa. Quando você gira a tela, essa caixa muda porque a orientação muda para paisagem.
fonte
Context
significa atual.Context
use para fazer a operação na tela atual. ex.1. getApplicationContext ()
2. getContext ()
fonte
Ótimas explicações! Para complementar tudo o que foi exposto, achei este um dos MindOrks muito útil e até mostra alguns casos de uso básicos para você pensar:
Entendendo o contexto no aplicativo Android
fonte
Em Java, dizemos que essa palavra - chave se refere ao estado do objeto atual do aplicativo.
Da mesma forma, em uma alternativa que temos
Context
no Android Development.Isso pode ser definido explícita ou implicitamente,
fonte
this
apenas funciona em atividades. O contexto não é uma alternativa a "isso" - o contexto é usado para acessar os recursos do sistema e muito mais. Você está simplificando demais o contexto e perdendo o ponto principal com ele.Este atributo declara a qual atividade esse layout está associado por padrão .
fonte