barre - android version



Comment quitter l'application et afficher l'écran d'accueil? (12)

(J'ai essayé des réponses précédentes mais elles manquent à certains points: par exemple, si vous ne faites pas de return; après avoir terminé l'activité, le code d'activité restant s'exécute Vous devez également éditer onCréer avec return Si vous n'exécutez pas super.onCreate () vous obtiendrez une erreur d'exécution)

Supposons que vous ayez MainActivity et ChildActivity .

Inside ChildActivity ajoutez ceci:

Intent intent = new Intent(ChildActivity.this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("EXIT", true);
startActivity(intent);
return true;

À l'intérieur de la fonction OnCreate de MainActivity, ajoutez ceci:

@Override
public void onCreate(Bundle savedInstanceState) {

    mContext = getApplicationContext();

    super.onCreate(savedInstanceState);

    if (getIntent().getBooleanExtra("EXIT", false)) {
        finish();
        return;
    }
    // your current codes
    // your current codes
}

https://ffff65535.com

J'ai une application où sur la page d'accueil j'ai des boutons pour naviguer dans l'application.

Sur cette page, j'ai un bouton "EXIT" qui, lorsqu'il est cliqué, devrait amener l'utilisateur à l'écran d'accueil sur le téléphone où se trouve l'icône de l'application.

Comment puis je faire ça?


Ajouter les lignes suivantes après finish(); dans onDestroy() :

android.os.Process.killProcess(android.os.Process.myPid());
super.onDestroy();

Certaines activités que vous ne souhaitez pas ouvrir à nouveau lorsque vous appuyez sur le bouton Précédent, telles que Activité de l'écran de démarrage, Activité de l'écran de bienvenue, Fenêtres de confirmation. En fait, vous n'avez pas besoin de cela dans la pile d'activité. vous pouvez le faire en utilisant => ouvrir le fichier manifest.xml et ajouter un attribut

android: noHistory = "vrai"

à ces activités.

<activity
    android:name="com.example.shoppingapp.AddNewItems"
    android:label="" 
    android:noHistory="true">
</activity>

OU

Parfois, vous voulez fermer l'application entière dans certains appuyez sur le bouton arrière. Ici, la meilleure pratique est d'ouvrir la fenêtre d'accueil au lieu de quitter l'application. Pour cela, vous devez remplacer la méthode onBackPressed (). En général, cette méthode ouvre l'activité supérieure dans la pile.

@Override
public void onBackPressed(){
Intent a = new Intent(Intent.ACTION_MAIN);
a.addCategory(Intent.CATEGORY_HOME);
a.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(a);

}

OU

Dans le bouton de retour, vous voulez quitter cette activité et vous ne voulez pas non plus l'ajouter dans la pile d'activité. appelle la méthode finish () dans la méthode onBackPressed (). il ne fera pas fermer l'application entière. il ira pour l'activité précédente dans la pile.

@Override
public void onBackPressed() {
  finish();
}

Il n'est pas recommandé de quitter votre application Android. Voir cette question pour plus de détails.

L'utilisateur peut toujours quitter votre application via le bouton d'accueil ou dans la première activité via le bouton de retour.


Je l'ai fait avec le mode observateur.

Interface de l'observateur

public interface Observer {
public void update(Subject subject);
}

Sujet de base

public class Subject {
private List<Observer> observers = new ArrayList<Observer>();

public void attach(Observer observer){
    observers.add(observer);
}

public void detach(Observer observer){
    observers.remove(observer);
}

protected void notifyObservers(){
    for(Observer observer : observers){
        observer.update(this);
    }
}
}

Child Subject implémente la méthode de sortie

public class ApplicationSubject extends Subject {
public void exit(){
    notifyObservers();
}
}

MyApplication que votre application devrait étendre

public class MyApplication extends Application {

private static ApplicationSubject applicationSubject;

public ApplicationSubject getApplicationSubject() {
            if(applicationSubject == null) applicationSubject = new ApplicationSubject();
    return applicationSubject;
}

}

Activité de base

public abstract class BaseActivity extends Activity implements Observer {

public MyApplication app;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    app = (MyApplication) this.getApplication();
    app.getApplicationSubject().attach(this);
}

@Override
public void finish() {
    // TODO Auto-generated method stub
            app.getApplicationSubject().detach(this);
    super.finish();
}

/**
 * exit the app
 */
public void close() {
    app.getApplicationSubject().exit();
};

@Override
public void update(Subject subject) {
    // TODO Auto-generated method stub
    this.finish();
}

}

Testons-le

public class ATestActivity extends BaseActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    close(); //invoke 'close'
}
}

La conception d'Android ne favorise pas la sortie d'une application par choix, mais la gère plutôt par le système d'exploitation. Vous pouvez afficher l'application Accueil par son intention correspondante:

Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

Quand vous appelez finish onDestroy () de cette activité sera appelée et elle retournera à l'activité précédente dans la pile d'activités ... Donc, pour exit, n'appelez pas finish ();


Si vous voulez mettre fin à une activité, vous pouvez simplement appeler finish() . Il est cependant mauvais d'avoir un bouton de sortie sur l'écran.


Une autre option consiste à utiliser la méthode FinishAffinity pour fermer toutes les tâches de la pile liées à l'application.

Voir: https://.com/a/27765687/1984636


Voici ce que j'ai fait:

SomeActivity.java

 @Override
    public void onBackPressed() {
            Intent newIntent = new Intent(this,QuitAppActivity.class);
            newIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
            startActivity(newIntent);
            finish();
    }

QuitAppActivity.java

@Override
protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      finish();
}

Fondamentalement, ce que vous avez fait est effacé toutes les activités de la pile et lancer QuitAppActivity , dont le seul travail est de quitter l'application.


si vous voulez quitter l'application, mettez ce code sous votre fonction

public void yourFunction()
{
finishAffinity();   
moveTaskToBack(true);

}



//For an instance, if you want to exit an application on double click of a 
//button,then the following code can be used.
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)  {
    if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 2) {
        // do something on back.
        From Android 16+ you can use the following:

        finishAffinity();
        moveTaskToBack(true);
    }

    return super.onKeyDown(keyCode, event);
}

System.exit(0);

Est probablement ce que vous cherchez. Il fermera toute l'application et vous amènera à l'écran d'accueil.





back-button