主要問題 :
Toast作為Android輕量級回報資訊提示的系統控件,在目前項目中大量使用,但是由于Toast是系統層面提供的,不依賴于前台頁面,存在濫用的風險。為了規避這些風險,Google在Android系統版本的疊代過程中,不斷進行了優化和限制。這些限制不可避免的影響到了正常的業務邏輯。
目前為止輸入法在測試過程中主要遇到過以下幾種情況:
1、多次觸發,Toast會按照隊列的形式一個接一個的彈出,哪怕此時App退出也會不停的彈;
2、小米機型上觸發Toast會帶有應用名的字首提示;
3、關閉通知權限後,無法正常的回報給使用者提示資訊,造成不太友好的體驗;
4、在部分機型上,單獨的輸入法鍵盤無法彈出Toast,需要懸浮窗權限,但在打開輸入法App後,就可以正常彈出了;
解決方案:
問題1:
Toast對象在show時,系統将該對象放入隊列中,隻有目前沒有要顯示的toast時才執行本次show請求,否則需要顯示完一個Toast之後再去顯示下一個Toast,如果使用者無意間多次觸發了這個Toast,很可能導緻這個Toast在較長的一段時間内無法消失,不停的出現,影響使用者視覺體驗。
解決:
可以在Toast觸發的時候增加目前是否存在Toast的判斷,如果目前沒有在顯示的Toast,則建立Toast并展示,如果目前已經存在一個Toast,則隻替換目前的文案顯示。
方法如下:

問題2:
在做定制版項目時,對方測試曾回報一個問題,在小米手機上,輸入法的Toast提示前面總是帶着:搜狗輸入法 的應用名稱,顯示如下:
經過調查發現,這種顯示方式是MIUI系統特有的,本着不一樣就是問題的邏輯,我們還是去查詢了下這個問題。
Toast的預設方式如下:
如果你們的項目也是這麼調用的,那麼你的Toast前面也會有應用名。
網上提供了一種方法,将預設Toast置為空,重新寫入内容,這樣就不會帶有應用名稱,方法如下:
彙總以上兩個問題,整合方法如下:
後面兩個權限帶來的問題,我們計劃使用Snackbar的方法解決。測試過效果後,再詳細給大家介紹Toast、Snackbar的優缺點。