C'est ce qui est recommandé comme droite solution :
La bonne solution (les crédits vont à Dan, CommonsWare et NeTeInStEiN) Suivez vous-même la visibilité de votre application en utilisant méthodes Activity.onPause, Activity.onResume. Stockez le statut de "visibilité dans une autre classe. Les bons choix sont votre propre implémentation de l l'application ou d'un service (il existe également quelques variantes de cette solution si vous souhaitez vérifier la visibilité de l'activité à partir du service).
Exemple Implémentez la classe d'application personnalisée (notez la méthode statique isActivityVisible()) :
public class MyApplication extends Application {
public static boolean isActivityVisible() {
return activityVisible;
}
public static void activityResumed() {
activityVisible = true;
}
public static void activityPaused() {
activityVisible = false;
}
private static boolean activityVisible;
}
Enregistrez votre classe d'application dans AndroidManifest.xml :
<application
android:name="your.app.package.MyApplication"
android:icon="@drawable/icon"
android:label="@string/app_name" >
Ajoutez onPause et onResume à chaque Activité du projet (vous pouvez créer un ancêtre commun pour vos Activités si vous le souhaitez, mais si votre activité est déjà étendue à partir de MapActivity/ListActivity etc. vous devez toujours écrire ce qui suit à la main) :
@Override
protected void onResume() {
super.onResume();
MyApplication.activityResumed();
}
@Override
protected void onPause() {
super.onPause();
MyApplication.activityPaused();
}
Dans votre finish()
vous voulez utiliser la méthode isActivityVisible()
pour vérifier si l'activité est visible ou non. Vous pouvez également vérifier si l'utilisateur a sélectionné une option ou non. Continuez lorsque les deux conditions sont remplies.
La source mentionne également deux solutions erronées... évitez donc de le faire.
Source : stackoverflow