Eu criei um projeto de aplicativo Android e em MainActivity.java> onCreate()
ele está chamando super.onCreate(savedInstanceState)
.
Como um iniciante, alguém pode explicar qual é o propósito da linha acima?
Cada Activity que você faz é iniciada por meio de uma sequência de chamadas de método. onCreate()
é a primeira dessas chamadas.
Cada uma de suas atividades se estende android.app.Activity
diretamente ou criando uma subclasse de outra subclasse de Activity
.
Em Java, quando você herda de uma classe, você pode substituir seus métodos para executar seu próprio código neles. Um exemplo muito comum disso é a substituição do toString()
método ao estender java.lang.Object
.
Quando substituímos um método, temos a opção de substituir completamente o método em nossa classe ou de estender o método da classe pai existente. Ao chamar super.onCreate(savedInstanceState);
, você diz ao Dalvik VM para executar seu código , além do código existente no onCreate () da classe pai. Se você deixar esta linha de fora, apenas o seu código será executado. O código existente é completamente ignorado.
No entanto, você deve incluir esta super chamada em seu método, porque se você não fizer isso, o onCreate()
código Activity
nunca será executado e seu aplicativo terá todos os tipos de problemas, como se não houvesse Contexto atribuído à atividade (embora você acesse a SuperNotCalledException
antes de ter a chance de descobrir que você não tem contexto).
Resumindo, as próprias classes do Android podem ser incrivelmente complexas. O código nas classes do framework lida com coisas como desenho de IU, limpeza da casa e manutenção da atividade e ciclos de vida do aplicativo. super
As chamadas permitem que os desenvolvedores executem esse código complexo nos bastidores, ao mesmo tempo em que fornecem um bom nível de abstração para nossos próprios aplicativos.
* O
onCreate(bundle)
método da classe derivada deve chamar a implementação da superclasse deste método. Ele lançará uma exceção SuperNotCalledException se a palavra-chave " super " não for usada.Para herança em
Java
, para substituir o método da superclasse e também para executar o método de classe acima, usesuper.methodname()
no método de classe derivada de substituição;A classe Android funciona da mesma maneira. Ao estender a
Activity
classe que possui oonCreate(Bundle bundle)
método no qual o código significativo é escrito e para executar esse código na atividade definida, use a palavra-chave super com o método onCreate () likesuper.onCreate(bundle)
.Este é um código escrito no
onCreate()
método da classe Activity e a equipe de desenvolvimento do Android pode adicionar algum código mais significativo a esse método posteriormente. Portanto, para refletir as adições, você deve chamar super.onCreate () em suaActivity
classe.Ele também mantém a variável, o
mCalled
que significa que você chamou osuper.onCreate(savedBundleInstance)
em sua atividade.Veja o código fonte aqui.
http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/1.5_r4/android/app/Activity.java#Activity.onCreate%28android.os.Bundle%29
fonte
Porque em super.onCreate () ele alcançará a classe Activity (classe pai de qualquer atividade) para carregar o savedInstanceState, e normalmente não definimos nenhum estado de instância salvo, mas o framework android fez de tal forma que deveríamos chamar aquele.
fonte
super.onCreate(savedInstanceState)
, a menos que haja algum outro erro neleÉ a informação que você deseja que retorne ao seu aplicativo, via onCreate (), se a atividade for destruída e reiniciada por algum motivo implícito (por exemplo, não porque o usuário pressionou o botão Voltar). O uso mais comum de onSaveInstanceState () é para lidar com rotações de tela, pois por padrão, as atividades são destruídas e recriadas quando o usuário desliza o teclado G1.
O motivo para chamar super.onCreate (savedInstanceState) é porque seu código não será compilado de outra forma. ;-)
fonte