Question

Si je lance un toast quand mon activité App est pas au premier plan alors le pain grillé montrera encore à l'écran. Comment puis-je empêcher mon toast de montrer quand mon application est en cours d'exécution en arrière-plan. i.e. avec aucun de ses activités actuellement l'activité étant affichée.

Je pense que je dois en quelque sorte détectons que mes activités ne sont pas l'activité en cours d'affichage et quand vrai ne délivrent pas de pains grillés; mais comment pourrais-je détecter cette condition?

Merci

Était-ce utile?

La solution

Définir un indicateur lorsque votre application est en arrière-plan (par exemple dans onPause), et ne pas envoyer si le drapeau tartines est réglé.

Si vous avez des tonnes d'activités, vous pouvez définir votre propre classe de base Activity qui enveloppe cette fonctionnalité.

Autres conseils

Avez-vous essayé d'installer une variable ou un indicateur lorsque la méthode onPause() est appelée pour cette activité pour désigner son été mis en arrière-plan, puis mettez cet indicateur lorsque onResume() est appelé?

Ensuite, laissez ce toast se produit si l'indicateur est éteint.

Dans mon application, mis en attente tartines apparaissant encore et encore quand l'application passe en arrière-plan, donc je ne suit pour résoudre le problème.

Ajoutez du code pour détecter lorsque l'application passe en arrière-plan. Une façon d'enregistrer gestionnaire de cycle de vie. Pour plus de détails ref

registerActivityLifecycleCallbacks(new MyLifecycleHandler());

App.inBackground = true; lorsque l'application va à l'arrière-plan et de montrer des toasts en utilisant la classe SmartToast

public class SmartToast {

    static ArrayList<WeakReference<Toast>> toasts = new ArrayList<>();
    public static void showToast(@NonNull Context context,@NonNull String message){
        //this will not allowed to show toast when app in background
        if(App.inBackground) return;
        Toast toast = Toast.makeText(context,message,Toast.LENGTH_SHORT);
        toasts.add(new WeakReference<>(toast));
        toast.show();

        //clean up WeakReference objects itself
        ArrayList<WeakReference<Toast>> nullToasts = new ArrayList<>();
        for (WeakReference<Toast> weakToast : toasts) {
            if(weakToast.get() == null) nullToasts.add(weakToast);
        }
        toasts.remove(nullToasts);
    }

    public static void cancelAll(){
        for (WeakReference<Toast> weakToast : toasts) {
            if(weakToast.get() != null) weakToast.get().cancel();
        }
        toasts.clear();
    }

}

méthode SmartToast.cancelAll(); d'appel lorsque l'application passe en arrière-plan courant cache tous les pains grillés en attente. Code est amusant. Amusez-vous!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top