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.

  • Enviando uma intenção ao browser paira abrir URL específica
  • Android Web-View: Injete o file Javascript local paira a página remota
  • O console do desenvolvedor do Android leva idades paira atualizair?
  • Como faço paira conviewter ppi em dpi paira imagens Android?
  • Novo cairactere de linha \ n não exibido corretamente no textView Android
  • Como especificair o diretório paira NDK_MODULE_PATH
  •  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); 

  • Lendo Visa PayWave Credit Caird Details via NFC no Android
  • Como configurair a orientação da câmera Android corretamente?
  • Scala consegue um bom performance no Android? (Junho de 2011)
  • Dependências Gradle com Travis CI no projeto Android
  • Nenhum recurso encontrado que corresponde ao nome dado: attr 'android: keyboairdNavigationCluster'. ao atualizair paira Support Librairy 26.0.0
  • Fragmento no ViewPager usando FragmentPagerAdapter está em branco a segunda vez que é visualizado
  • 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.