Vous voulez cacher des toasts Android quand l'application en arrière-plan
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
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!