实现了一个防止内容重复弹出的Toast工具类,防止内容重复弹出,并且新的Toast会立刻覆盖旧的Toast,不会排队等待就Toast显示结束才显示
public class ToastUtil { private static String oldMsg; protected static Toast toast = null; private static long oneTime=0; private static long twoTime=0; public static void showShortToast(Context mContext, String msg) { if(toast==null){ /*这种写法如果传入Activity的实例进来,将有可能会导致Activvity泄露 * 因为静态工具类的生存周期*/ // toast =Toast.makeText(mContext, msg, Toast.LENGTH_SHORT); /*这样的话,不管传递什么content进来,都只会引用全局唯一的Content,不会产生内存泄露*/ toast =Toast.makeText(mContext.getApplicationContext(), msg, Toast.LENGTH_SHORT); toast.show(); oneTime=System.currentTimeMillis(); }else{ twoTime=System.currentTimeMillis(); if(msg.equals(oldMsg)){ if(twoTime-oneTime>Toast.LENGTH_SHORT){ toast.show(); } }else{ oldMsg = msg; toast.setText(msg); toast.show(); } } oneTime=twoTime; } }调用的时候,如果按照原来的写法:
toast =Toast.makeText(mContext, msg, Toast.LENGTH_SHORT);
这样调用:
ToastUtil.showShortToast(INeedHelpActivity.this, "服务器连接异常");将会导致INeedHelpActivity内存泄露
若想内存不泄露,可以这样调用:
ToastUtil.showShortToast(getApplicationContext(), "网络连接异常");
当然最简单的方法是在工具类里边直接转换,调用出的代码将不用修改
toast =Toast.makeText(mContext.getApplicationContext(), msg, Toast.LENGTH_SHORT);