É uma boa prática recarregar um Activity
no Android ?
Qual seria a melhor maneira de fazer isso? this.finish
e depois this.startActivity
com a atividade Intent
?
É uma boa prática recarregar um Activity
no Android ?
Qual seria a melhor maneira de fazer isso? this.finish
e depois this.startActivity
com a atividade Intent
?
Respostas:
Você pode simplesmente usar
finish();
startActivity(getIntent());
para atualizar um Activity
de dentro de si.
para quem não quer ver o método piscar após recrte () , basta usar
finish();
overridePendingTransition(0, 0);
startActivity(getIntent());
overridePendingTransition(0, 0);
É isso que faço para recarregar a atividade depois de alterar o retorno de uma alteração de preferência.
@Override
protected void onResume() {
super.onResume();
this.onCreate(null);
}
Isso essencialmente faz com que a atividade seja redesenhada.
Atualizado: A melhor maneira de fazer isso é chamar o recreate()
método. Isso fará com que a atividade seja recriada.
Vi respostas anteriores que foram fornecidas para recarregar a atividade usando o Intent. Isso funcionará, mas você também pode fazer o mesmo usando o método recreate () fornecido na própria classe Activity.
Em vez de escrever isso
// Atualizar a atividade principal ao fechar a caixa de diálogo
Intent refresh = new Intent(this, clsMainUIActivity.class);
startActivity(refresh);
this.finish();
Isso pode ser feito escrevendo apenas isso
recreate();
recreate()
foi a solução para mim - "reiniciar" a atividade não funcionou para mim, pois iniciei a atividade usando "StartActivityForResult" e interrompeu o comportamento.
simplesmente use
this.recreate();
isso acionará o método onCreate na atividade
Eu precisava atualizar uma lista de mensagens em um dos meus aplicativos às pressas, portanto, acabei de executar uma atualização da minha atividade principal da interface do usuário antes de fechar a caixa de diálogo em que estava. Tenho certeza de que há maneiras melhores de fazer isso também.
// Refresh main activity upon close of dialog box
Intent refresh = new Intent(this, clsMainUIActivity.class);
startActivity(refresh);
this.finish(); //
O Android inclui um sistema de gerenciamento de processos que lida com a criação e destruição de atividades que nega amplamente qualquer benefício que você veria ao reiniciar manualmente uma atividade. Você pode ver mais informações sobre isso em Fundamentos de aplicativos
O que é uma boa prática é garantir que seus métodos onPause e onStop liberem todos os recursos dos quais você não precisa se apegar e use onLowMemory para reduzir suas necessidades de atividades ao mínimo absoluto.
em alguns casos, é a melhor prática; em outros, não é uma boa ideia orientada ao contexto, se você optar por fazê-lo, usando a seguinte é a melhor maneira de passar de uma atividade para os filhos dela:
Intent i = new Intent(myCurrentActivityName.this,activityIWishToRun.class);
startActivityForResult(i, GlobalDataStore.STATIC_INTEGER_VALUE);
a coisa é sempre que você termina () de activityIWishToRun e retorna à sua atividade de viver
Recarregar toda a sua atividade pode ser uma tarefa pesada. Basta colocar a parte do código que deve ser atualizada no ( kotlin ):
override fun onResume() {
super.onResume()
//here...
}
Java:
@Override
public void onResume(){
super.onResume();
//here...
}
E chame " onResume () " sempre que necessário.
Não acho que seja uma boa ideia ... seria melhor implementar um método mais limpo. Por exemplo, se sua atividade tiver um formulário, o método mais limpo poderá limpar cada widget no formulário e excluir todos os dados temporários. Eu acho que é isso que você deseja: restaurar a atividade ao seu estado inicial.
Depois de experimentar isso por um tempo, não encontrei consequências inesperadas ao reiniciar uma atividade. Além disso, acredito que isso é muito semelhante ao que o Android faz por padrão quando a orientação muda, então não vejo um motivo para não fazê-lo em circunstâncias semelhantes.
eu tenho o mesmo problema
import android.support.v4.content.IntentCompat;
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |IntentCompat.FLAG_ACTIVITY_CLEAR_TASK);
esse código funciona para mim. Api Android 17
Em uma atividade, você pode chamar recreate()
para "recriar" a atividade (API 11+)
Eu tive outra abordagem, como: definir launchMode
minha atividade como singleTop
e sem ligar finish()
, apenas startActivity(getIntent())
fará o trabalho. Só tem que se preocupar com os novos dados em onCreate()
e onNewIntent
. À maneira de Sush, o aplicativo pode piscar como AMAN SINGH disse. Mas a abordagem de AMAN SINGH ainda criará uma nova atividade que, de alguma forma, é desnecessária, mesmo que ele tenha corrigido o problema de 'piscar', eu acho.
Tarde demais para esta pergunta, mas se alguém está procurando uma solução, aqui está ela.
Após o login, tive o mesmo problema, então usei
@Override
protected void onRestart() {
this.recreate();
super.onRestart();
}
eu usei isso e funciona bem sem
finish()
startActivity(getIntent());
para mim, está funcionando, não está criando outros Intents e, no mesmo, os novos dados carregados.
overridePendingTransition(0, 0);
finish();
overridePendingTransition(0, 0);
startActivity(getIntent());
overridePendingTransition(0, 0);