No Android, defini uma atividade ExampleActivity.
Quando meu aplicativo foi iniciado, uma instância dessa A-Activity foi criada, digamos que sim A
. Quando o usuário clicou em um botão A
, outra instância de B-Activity, B, foi criada. Agora, a pilha de tarefas é BA, com B no topo. Em seguida, o usuário clicou em um botão em B, outra instância de C-Activity e C foi criada. Agora, a pilha de tarefas é CBA, com C no topo.
Agora, quando o usuário clica em um botão em C, quero que o aplicativo traga A para o primeiro plano, ou seja, faça com que A esteja no topo da pilha de tarefas, ACB.
Como posso escrever o código para que isso aconteça?
android
android-intent
android-activity
user256239
fonte
fonte
FLAG_ACTIVITY_SINGLE_TOP
não ajudará aqui. Quando ActivityC está no topo da pilha e chamastartActivity()
para iniciar ActivityA, mesmo que você definaFLAG_ACTIVITY_SINGLE_TOP
, ainda criará uma nova instância de ActivityA.FLAG_ACTIVITY_SINGLE_TOP
impede apenas a criação de uma nova instância se você estiver tentando iniciar uma atividade que já está no topo da pilha . Nesse caso, ActivityA não está no topo da pilha, então o Android cria uma nova instância.(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT | Intent.FLAG_ACTIVITY_CLEAR_TOP)
para limpar qualquer histórico após um dadoActivity
.A melhor maneira que descobri de fazer isso foi usar a mesma intenção que a tela inicial do Android usa - o inicializador de aplicativos.
Por exemplo:
Dessa forma, qualquer atividade em meu pacote que foi usada mais recentemente pelo usuário é trazida de volta para a frente novamente. Achei isso útil ao usar o PendingIntent do meu serviço para levar o usuário de volta ao meu aplicativo.
fonte
Activity
dentro da pilha de tarefas. OP afirma claramente que deseja mover-seActivityA
da parte inferior da pilha para o topo da pilha (ou seja: ele deseja reordenar a ActivityA para a frente da pilha de tarefas ). Esta resposta não fará isso. Esta resposta é uma resposta à pergunta "Como posso trazer meu aplicativo (pilha de tarefas) do segundo plano para o primeiro plano?" Essa é uma pergunta completamente diferente da pergunta original de OP.Aqui está um exemplo de código de como você pode fazer isso:
Isso garantirá que você tenha apenas uma instância de uma atividade na pilha.
fonte
FLAG_ACTIVITY_REORDER_TO_FRONT : Se definido em um Intent passado para Context.startActivity (), este sinalizador fará com que a atividade iniciada seja trazida para a frente da pilha de histórico de sua tarefa se já estiver em execução.
fonte
Acho que uma combinação de
Intent
sinalizadores deve resolver. Em particular,Intent.FLAG_ACTIVITY_CLEAR_TOP
eIntent.FLAG_ACTIVITY_NEW_TASK
.Adicione essas sinalizações à sua intent antes de chamar
startActvity
.fonte
i.setFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT);
Nota Seu modo de inicialização de atividade inicial deve ser single_task
fonte
Em geral, acho que esse método de gerenciamento de atividades não é recomendado. O problema em reativar uma atividade duas etapas abaixo na pilha é que essa atividade provavelmente foi eliminada. Meu conselho é lembrar o estado de suas atividades e iniciá-las com
startActivity ()
Tenho certeza que você já viu esta página, mas para sua conveniência este link
fonte
Se você deseja colocar uma atividade no topo da pilha ao clicar em uma Notificação, pode ser necessário fazer o seguinte para que FLAG_ACTIVITY_REORDER_TO_FRONT funcione:
A solução para isso foi fazer um receptor de transmissão que escuta as ações de transmissão que a notificação aciona. Então, basicamente:
A notificação aciona uma ação de transmissão com um nome extra da atividade a ser iniciada.
O receptor de transmissão detecta isso quando a notificação é clicada e, em seguida, cria uma intenção de iniciar essa atividade usando a sinalização FLAG_ACTIVITY_REORDER_TO_FRONT
A atividade é colocada no topo da pilha de atividades, sem duplicatas.
fonte
se você estiver usando o "Google Cloud Message" para receber notificações push com a classe "PendingIntent", o código a seguir exibirá a notificação apenas na barra de ação.
Clicando na notificação nenhuma atividade será criada, a última atividade ativa é restaurada mantendo o estado atual sem problemas.
Intent notificationIntent = new Intent(this, ActBase.class); **notificationIntent.setAction(Intent.ACTION_MAIN); notificationIntent.addCategory(Intent.CATEGORY_LAUNCHER);** PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this) .setSmallIcon(R.drawable.ic_launcher) .setContentTitle("Localtaxi") .setVibrate(vibrate) .setStyle(new NotificationCompat.BigTextStyle().bigText(msg)) .setAutoCancel(true) .setOnlyAlertOnce(true) .setContentText(msg);
mBuilder.setContentIntent(contentIntent);
NotificationManager mNotificationManager = (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE);
mNotificationManager.notify(NOTIFICATION_ID, mBuilder.build());
Tchau!
fonte