1. 程式人生 > >如何讓Toast訊息在應用退出後不再顯示

如何讓Toast訊息在應用退出後不再顯示

Android中Toast的訊息是放在一個佇列中的,系統會依次從佇列中取出並顯示。而我們在應用中,有時候希望在應用退出後不再顯示還未顯示過的Toast訊息。比如,在程式碼中訪問某個網路介面,待其返回後給出相應的Toast資訊提示使用者,然而有時候我們應用已經退出(或不再前臺)了,還沒有返回結果,但仍然會提示Toast。

那麼,如何讓應用在退出(或當前螢幕不顯示)之後不再顯示Toast訊息,我們通過可以判斷該應用當前是否在任務棧的棧頂來決定是否顯示Toast。

判斷應用是否在當前任務棧的棧頂:

    publicstatic boolean isActivityRunning(String packagename, Context context){
         ActivityManager am = (ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE);          List<RunningTaskInfo> runningTaskInfos = am.getRunningTasks(1);          String cmpNameTemp = null;          if(null != runningTaskInfos){              cmpNameTemp = runningTaskInfos.get(0).topActivity
.toString();
         }          if(null != cmpNameTemp){              return cmpNameTemp.contains(packagename);          }          returnfalse;     }

定義Toast:

publicclass 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);     } }