Android中Toast的消息是放在一个队列中的,系统会依次从队列中取出并显示。而我们在应用中,有时候希望在应用退出后不再显示还未显示过的Toast消息。比如,在代码中访问某个网络接口,待其返回后给出相应的Toast信息提示用户,然而有时候我们应用已经退出(或不再前台)了,还没有返回结果,但仍然会提示Toast。
那么,如何让应用在退出(或当前屏幕不显示)之后不再显示Toast消息,我们通过可以判断该应用当前是否在任务栈的栈顶来决定是否显示Toast。
判断应用是否在当前任务栈的栈顶:
public static boolean isActivityRunning(String packagename, Context context){
ActivityManager am = (ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE);
List runningTaskInfos = am.getRunningTasks(1);
String cmpNameTemp = null;
if(null != runningTaskInfos){
cmpNameTemp = runningTaskInfos.get(0).topActivity.toString();
}
if(null != cmpNameTemp){
return cmpNameTemp.contains(packagename);
}
return false;
}
定义Toast:
public class CustomToast {
private static Toast mToast;
private static Handler mHandler = new Handler();
private static Runnable r = new Runnable() {
public void run() {
mToast.cancel();
}
};
public static void showToast(Context context, String text, int duration) {
mHandler.removeCallbacks(r);
if (mToast != null)
mToast.setText(text);
else
mToast = Toast.makeText(context, text, Toast.LENGTH_SHORT);
mHandler.postDelayed(r, duration);
if(isActivityRunning(context.getPackageName(), context)){
mToast.show();
}
}
public static void showToast(Context context, int resId, int duration) {
showToast(context, context.getResources().getString(resId), duration);
}
}