Android中Toast的消息是放在一个队列中的,系统会依次从队列中取出并显示。而我们在应用中,有时候希望在应用退出后不再显示还未显示过的Toast消息。比如,在代码中访问某个网络接口,待其返回后给出相应的Toast信息提示用户,然而有时候我们应用已经退出(或不再前台)了,还没有返回结果,但仍然会提示Toast。

那么,如何让应用在退出(或当前屏幕不显示)之后不再显示Toast消息,我们通过可以判断该应用当前是否在任务栈的栈顶来决定是否显示Toast。

判断应用是否在当前任务栈的栈顶:

    public static 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);
         }
         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);
    }

}

如何让Toast消息在应用退出后不再显示相关推荐

  1. 使用FloatingActionButton滑动消失后不再显示

    问题背景 最近将将SDK升级到25之后遇到一问题就是,FloatingActionButton可以正常显示,但是列表上滑动隐藏后,再向下滑动,FloatingActionButton不在显示出来.之前 ...

  2. [NSUserDefaults]的使用:登陆后不再显示登录界面。

    简介: NSUserDefaults是IOS应用用来存储用户偏好和配置信息的途径,就像是一个数据库,但是它通过键值对(key-value)的方式存储. 比如["Thematrix" ...

  3. 将app变为桌面程序,开机后不再显示原桌面,而是显示我们的app界面

    两步完成: 1.如图 在项目清单跟节点加入android:installLocation="internalOnly",指定你的app安装到内存中. 2.如图 在第一个要启动的ac ...

  4. flutter Toast消息提示框

    题记 -- 执剑天涯,从你的点滴积累开始,所及之处,必精益求精,即是折腾每一天. 本文章将讲述: 1.在 flutter 跨平台开发中,使用 Dart 实现 Toast 消息提示框效果 2.Overl ...

  5. Android webview退出后崩溃问题(OPPO和vivo手机有问题)

    Android webview退出后崩溃问题(OPPO和vivo手机有问题) android.view.WindowManager$BadTokenException: Unable to add w ...

  6. Linux内存中加载二进制,linux – 程序退出后二进制文件会留在内存中吗?

    我知道程序首次启动时,由于代码不在内存中,因此在开始时会出现大量页面错误,因此需要从磁盘加载代码. 程序退出后会发生什么?二进制文件是否留在内存中?该程序的后续调用是否会发现代码已经在内存中,因此没有 ...

  7. 如何让程序异常退出后重启

    标 题:如何让程序异常退出后重启 发信人:蔡子楠 出处:http://www.freeeim.com/ 时 间:2008-02-14 11:25:22 "程序 FreeEIM.exe 遇到问 ...

  8. C#应用程序退出后托盘图标(notify…

    很多时候,在我们的应用程序执行Application.Exit()退出后,我们设置的状态栏托盘图标都不会立即消失,当鼠标光标划过时才会消失.这是因为托盘图标的资源还没来得及释放造成的,要想解决这个问题 ...

  9. 关于go在函数退出后子协程的退出问题

    关于go在函数退出后子协程的退出问题 该问题来源于自己在读fabric源码时,看到的一个测试代码,在一个函数中启用协程,然后该函数退出了,由于平常没有这样处理过,以及受原有c++函数域的影响,认为函数 ...

最新文章

  1. Swift 闭包表达式
  2. 山果(转载《人民日报》)
  3. 命名空间_python基础 13 类命名空间于对象、实例的命名空间,组合方法
  4. java安全(六)java反序列化2,ysoserial调试
  5. Java Integer类numberOfLeadingZeros()方法的示例
  6. 将serversocket 写在按钮事件中连接不上_看 Netty 在 Dubbo 中如何应用
  7. 【非公开】#include
  8. (80)FPGA复位激励(function)
  9. 拼多多派发“五五购物节”消费券 万张消费券30分钟被抢购一空
  10. 使用Java的代理机制进行日志输出
  11. 数据库关键字引起的,ORA-00904: TABLE.column: 标识符无效
  12. 大工18春《c和c语言程序设计》,东大21春《高级语言程序设计基础》在线平时作业1题目及答案...
  13. ubuntu svn命令
  14. 圆角矩形大小怎么调整html,html圆角矩形
  15. Linux 平台安装 VNC
  16. STM32F107中断优先级分组配置
  17. 华硕路由器远程代码执行漏洞通告
  18. 华为路由协议ospf,域内路由,域间路由,域外路由
  19. 英语chalchite蓝绿松石CHALCHITE单词
  20. Lua--pairs和ipairs遍历区别

热门文章

  1. 为何float有效位数只有7位?
  2. 从草根到百万年薪程序员的十年风雨之路,实战解析
  3. 临床路径在中国的实施现状及路径产品发展前景
  4. APK的反编译工具,Apktool,Dex2jar,JD-GUI等
  5. jsch.addIdentity invalid key报错问题
  6. 计算机网络怎么知道起始序号,怎么知道自己电脑上操作系统的序列号?
  7. PCL+VS+Qt+Win10 的综合配置精华
  8. VMware被博通收购后:大中华区总裁上任仅9个月突然离职
  9. AAA云主机免费推荐码
  10. CentOS7 LVM与RAID简单使用