Android靜態工具類ToastUtil因為傳入content不當導致Activity記憶體洩露
實現了一個防止內容重複彈出的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);
相關文章
- android Handler導致的記憶體洩露Android記憶體洩露
- 記一次 redis 事件註冊不當導致的記憶體洩露Redis事件記憶體洩露
- Android中dp和px轉換的工具類【工具類靜態方法注意防止記憶體洩露】Android記憶體洩露
- 可能會導致.NET記憶體洩露的8種行為記憶體洩露
- Volley中listener導致的記憶體洩露記憶體洩露
- Android記憶體洩露分析以及工具的使用Android記憶體洩露
- SQL Server 記憶體洩露(memory leak)——遊標導致的記憶體問題SQLServer記憶體洩露
- Android 記憶體洩露詳解Android記憶體洩露
- Android 檢測記憶體洩露Android記憶體洩露
- 記憶體洩露記憶體洩露
- 線上記憶體洩露定位--memleak工具記憶體洩露
- leaks工具查詢記憶體洩露記憶體洩露
- SQL Server 記憶體洩露”(memory leak)的案例—遊標導致的記憶體問題SQLServer記憶體洩露
- 內部Handler類引起記憶體洩露記憶體洩露
- js記憶體洩露JS記憶體洩露
- JavaScript記憶體洩露JavaScript記憶體洩露
- 記憶體洩露嗎記憶體洩露
- SHBrowseForFolder 記憶體洩露記憶體洩露
- 【YFMemoryLeakDetector】人人都能理解的 iOS 記憶體洩露檢測工具類iOS記憶體洩露
- Go坑:time.After可能導致的記憶體洩露問題分析Go記憶體洩露
- Android 如何避免 Context 記憶體洩露AndroidContext記憶體洩露
- Android 記憶體洩露優化處理Android記憶體洩露優化
- Android中Handler引起的記憶體洩露Android記憶體洩露
- Android 中 Handler 引起的記憶體洩露Android記憶體洩露
- Android記憶體優化——記憶體洩露檢測分析方法Android優化記憶體洩露
- C程式記憶體洩露檢測工具——ValgrindC程式記憶體洩露
- 記憶體溢位和記憶體洩露記憶體溢位記憶體洩露
- Lowmemorykiller記憶體洩露分析記憶體洩露
- 避免PHP-FPM記憶體洩漏導致記憶體耗盡PHP記憶體
- 二、Android效能優化之記憶體洩露分析及工具使用Android優化記憶體洩露
- vue 打包專案時因node記憶體洩露而報錯Vue記憶體洩露
- Android效能最佳化之記憶體洩露Android記憶體洩露
- MLeaksFinder:精準 iOS 記憶體洩露檢測工具iOS記憶體洩露
- 使用 mtrace 分析 “記憶體洩露”記憶體洩露
- 實戰Go記憶體洩露Go記憶體洩露
- js記憶體洩露的原因JS記憶體洩露
- Java記憶體洩露的原因Java記憶體洩露
- JAVA 記憶體洩露的理解Java記憶體洩露