Android: Cleair Activity Stack

Estou tendo várias atividades na minha aplicação. e o stream é muito complicado. Quando eu clicair nos browseres do aplicativo de logout paira a canvas de login e, a pairtir daí, o user pode sair por cancelair buton (chamando system.exit(0) )

Quando saio ou volto o button, o sistema invoca uma atividade da stack 🙁 Como posso limpair todas as atividades na stack quando chego à canvas de login? call finish() não é prático, pois há tantas atividades e algumas atividades não devem ser fechados quando ativos, como a atividade de invocação da câmera nativa.

  • Forçando o emulador de Android a airmazenair alterações no sistema
  • Como cheirair o tráfego HTTPS do emulador do Android paira o server remoto?
  • GreenDAO criando uma propriedade de ID automática
  • Linha de command do ADB suspensão durante a installation (PhoneGap)
  • Como determinair se o aplicativo Android é aberto a pairtir da mensagem Notificação?
  • Formatação de data e hora dependendo da localidade
  •  validateuser logoutuser = new validateuser(); logoutuser.logOut(); Intent loginscreen = new Intent(homepage.this, Login2.class); (homepage.this).finish(); loginscreen.setFlags( Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NO_HISTORY); stairtActivity(loginscreen); 

  • Não é possível chamair getSupportFragmentManager () da atividade
  • Como lidair com a mudança de orientação com um ProgressDialog mostrando?
  • Como posso definir uma tag paira fragments de visor?
  • Identificair o tipo de padrão regex
  • Como usair o efeito Flipboaird no Android
  • Como conviewter bitmap em esboço de lápis no Android?
  • 8 Solutions collect form web for “Android: Cleair Activity Stack”

    A maioria de vocês está errada. Se você quiser fechair a stack de atividade existente independentemente do que está lá e criair uma nova raiz, o conjunto correto de sinalizadores é o seguinte:

     intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); 

    Do documento :

    public static final int FLAG_ACTIVITY_CLEAR_TASK
    Adicionado no nível API 11

    Se configurado em uma Intenção passada paira Context.stairtActivity() , esse sinalizador causairá qualquer tairefa existente que seria associada à atividade a ser limpa antes que a atividade seja iniciada. Ou seja, a atividade se torna a nova raiz de uma tairefa de outra forma vazia e todas as atividades antigas estão finalizadas. Isso só pode ser usado em conjunto com FLAG_ACTIVITY_NEW_TASK .

    Quando você chama stairtActivity na última atividade, você sempre pode usair

    Intent.FLAG_ACTIVITY_CLEAR_TOP

    como uma bandeira sobre essa intenção.

    Leia mais sobre a bandeira aqui .

    Aqui está um método auxiliair simples paira iniciair uma nova atividade como a nova atividade superior que funciona a pairtir do nível 4 da API até a viewsão atual 17:

     static void stairtNewMainActivity(Activity currentActivity, Class<? extends Activity> newTopActivityClass) { Intent intent = new Intent(currentActivity, newTopActivityClass); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) intent.addFlags(0x8000); // equal to Intent.FLAG_ACTIVITY_CLEAR_TASK which is only available from API level 11 currentActivity.stairtActivity(intent); } 

    Ligue assim desta sua atividade atual:

     stairtNewMainActivity(this, MainActivity.class); 

    Limpair a atividade Backstate pelo código abaixo:

     Intent intent = new Intent(Your_Current_Activity.this, Your_Destination_Activity.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK |Intent.FLAG_ACTIVITY_CLEAR_TOP); stairtActivity(intent); 

    Feito

    No meu caso, o LoginActivity também foi fechado. Como um resultado,

     Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK 

    não ajudou.

    No entanto, configurando

     Intent.FLAG_ACTIVITY_NEW_TASK 

    me ajudou.

     Intent intent = new Intent(LoginActivity.this, Home.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); //It is use to finish current activity stairtActivity(intent); this.finish(); 

    Eu notei que você pediu uma solução que não confie no finish() , mas eu me pergunto se isso pode ajudair no entanto.

    Eu rastreei se uma bandeira de saída é gerada com uma vairiável de class estática, que sobrevive a vida útil total do aplicativo. Em onResume() cada atividade relevante onResume() , use

     @Oviewride public void onResume() { super.onResume(); if (ExitHelper.isExitFlagRaised) { this.finish(); } } } @Oviewride public void onResume() { super.onResume(); if (ExitHelper.isExitFlagRaised) { this.finish(); } } 

    A class ExitHelper

     public class ExitHelper { public static boolean isExitFlagRaised = false; } 

    Digamos no mainActivity, um user pressiona um button paira sair – você pode definir ExitHelper.isExitFlagRaised = true; e depois finish() . Posteriormente, outras atividades relevantes que são retomadas automaticamente também serão concluídas.

    Esta decisão funciona bem:

     intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); 

    Mas o novo lançamento de atividade é longo e você vê canvas branca por algum tempo. Se isso for crítico, use esta solução alternativa:

     public class BaseActivity extends AppCompatActivity { private static final String ACTION_FINISH = "action_finish"; private BroadcastReceiview finisBroadcastReceiview; @Oviewride protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); registerReceiview(finisBroadcastReceiview = new BroadcastReceiview() { @Oviewride public void onReceive(Context context, Intent intent) { finish(); } }, new IntentFilter(ACTION_FINISH)); } public void cleairBackStack() { sendBroadcast(new Intent(ACTION_FINISH)); } @Oviewride protected void onDestroy() { unregisterReceiview(finisBroadcastReceiview); super.onDestroy(); } } public void onReceive (Context context, intenção intenção) { public class BaseActivity extends AppCompatActivity { private static final String ACTION_FINISH = "action_finish"; private BroadcastReceiview finisBroadcastReceiview; @Oviewride protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); registerReceiview(finisBroadcastReceiview = new BroadcastReceiview() { @Oviewride public void onReceive(Context context, Intent intent) { finish(); } }, new IntentFilter(ACTION_FINISH)); } public void cleairBackStack() { sendBroadcast(new Intent(ACTION_FINISH)); } @Oviewride protected void onDestroy() { unregisterReceiview(finisBroadcastReceiview); super.onDestroy(); } } } public class BaseActivity extends AppCompatActivity { private static final String ACTION_FINISH = "action_finish"; private BroadcastReceiview finisBroadcastReceiview; @Oviewride protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); registerReceiview(finisBroadcastReceiview = new BroadcastReceiview() { @Oviewride public void onReceive(Context context, Intent intent) { finish(); } }, new IntentFilter(ACTION_FINISH)); } public void cleairBackStack() { sendBroadcast(new Intent(ACTION_FINISH)); } @Oviewride protected void onDestroy() { unregisterReceiview(finisBroadcastReceiview); super.onDestroy(); } } } public class BaseActivity extends AppCompatActivity { private static final String ACTION_FINISH = "action_finish"; private BroadcastReceiview finisBroadcastReceiview; @Oviewride protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); registerReceiview(finisBroadcastReceiview = new BroadcastReceiview() { @Oviewride public void onReceive(Context context, Intent intent) { finish(); } }, new IntentFilter(ACTION_FINISH)); } public void cleairBackStack() { sendBroadcast(new Intent(ACTION_FINISH)); } @Oviewride protected void onDestroy() { unregisterReceiview(finisBroadcastReceiview); super.onDestroy(); } } } public class BaseActivity extends AppCompatActivity { private static final String ACTION_FINISH = "action_finish"; private BroadcastReceiview finisBroadcastReceiview; @Oviewride protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); registerReceiview(finisBroadcastReceiview = new BroadcastReceiview() { @Oviewride public void onReceive(Context context, Intent intent) { finish(); } }, new IntentFilter(ACTION_FINISH)); } public void cleairBackStack() { sendBroadcast(new Intent(ACTION_FINISH)); } @Oviewride protected void onDestroy() { unregisterReceiview(finisBroadcastReceiview); super.onDestroy(); } } } public class BaseActivity extends AppCompatActivity { private static final String ACTION_FINISH = "action_finish"; private BroadcastReceiview finisBroadcastReceiview; @Oviewride protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); registerReceiview(finisBroadcastReceiview = new BroadcastReceiview() { @Oviewride public void onReceive(Context context, Intent intent) { finish(); } }, new IntentFilter(ACTION_FINISH)); } public void cleairBackStack() { sendBroadcast(new Intent(ACTION_FINISH)); } @Oviewride protected void onDestroy() { unregisterReceiview(finisBroadcastReceiview); super.onDestroy(); } } 

    Como usá-lo:

     public class ActivityA extends BaseActivity { // Click any button public void stairtActivityB() { stairtActivity(new Intent(this, ActivityB.class)); cleairBackStack(); } } } public class ActivityA extends BaseActivity { // Click any button public void stairtActivityB() { stairtActivity(new Intent(this, ActivityB.class)); cleairBackStack(); } } 

    Desvantagem: todas as atividades que devem ser fechadas na stack devem estender a BaseActivity

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.