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?
Respostas:
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, use super.methodname()
no método de classe derivada de substituição;
A classe Android funciona da mesma maneira. Ao estender a Activity
classe que possui o onCreate(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 () like super.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 sua Activity
classe.
protected void onCreate(Bundle savedInstanceState) {
mVisibleFromClient = mWindow.getWindowStyle().getBoolean(
com.android.internal.R.styleable.Window_windowNoDisplay, true);
mCalled = true;
}
boolean mVisibleFromClient = true;
/**
* Controls whether this activity main window is visible. This is intended
* only for the special case of an activity that is not going to show a
* UI itself, but can't just finish prior to onResume() because it needs
* to wait for a service binding or such. Setting this to false prevents the UI from being shown during that time.
*
* <p>The default value for this is taken from the
* {@link android.R.attr#windowNoDisplay} attribute of the activity's theme.
*/
Ele também mantém a variável, o mCalled
que significa que você chamou o super.onCreate(savedBundleInstance)
em sua atividade.
final void performStart() {
mCalled = false;
mInstrumentation.callActivityOnStart(this);
if (!mCalled) {
throw new SuperNotCalledException(
"Activity " + mComponent.toShortString() +
" did not call through to super.onStart()");
}
}
Veja o código fonte aqui.
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.
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. ;-)