Android Handler的postDelayed()關(guān)閉的方法及遇到問題
最近在使用Handler的時(shí)候 發(fā)現(xiàn)了一個(gè)錯(cuò)誤的使用方法
就是直接new 類似這樣
new Handler().postDelayed(new Runnable() { @Override public void run() {showPaySuccessDialog.dismiss(); }}, 1000);
這種用法對于業(yè)務(wù)簡單的情況 也沒錯(cuò) 比如 定時(shí)關(guān)閉一個(gè)dialog
但是對于復(fù)雜的業(yè)務(wù)場景 這么用是不對的 也不是不對吧 這么用的話有bug
遇到的問題我用 直接new Handler()的方法去執(zhí)行一個(gè)播放語音的方法代碼如下
//todo 此處檢測 new Handler().postDelayed(new Runnable() {@Overridepublic void run() { if (!MediaplayerUtil.isPlaying()) {MediaplayerUtil.playMusic(context, R.raw.pay_tips); }} }, 15 * 1000);
我以為這樣寫沒錯(cuò) 但是在測試的時(shí)候 出現(xiàn)了一個(gè)問題頁面都關(guān)閉了 這個(gè)語音播報(bào) 還在繼續(xù) 哈哈哈 我同事聽到都驚呆了頁面都沒有了 語音還在播放 很尷尬當(dāng)時(shí)聽到這個(gè)語音 我一耳就聽出了問題
因?yàn)楫?dāng)時(shí)這么寫 就覺得不對勁 可能會(huì)出問題 所以我加了一個(gè)TODO標(biāo)記提示這里可能會(huì)出問題
解決方法歸根結(jié)底 還是我的寫法問題 不夠正規(guī) 偷懶行為 哈哈哈
1、首先創(chuàng)建一個(gè)Handler對象
Handler handler=new Handler();
2、然后創(chuàng)建一個(gè)Runnable對象
Runnable runnable=new Runnable(){ @Override public void run() { // TODO Auto-generated method stub //要做的事情,這里再次調(diào)用此Runnable對象,以實(shí)現(xiàn)每兩秒實(shí)現(xiàn)一次的定時(shí)器操作 handler.postDelayed(this, 2000); }};
3、使用PostDelayed方法,兩秒后調(diào)用此Runnable對象
實(shí)際上也就實(shí)現(xiàn)了一個(gè)2s的一個(gè)定時(shí)器
handler.postDelayed(runnable, 2000);
4、如果想要關(guān)閉此定時(shí)器,可以這樣操作
handler.removeCallbacks(runnable);
Handler 定時(shí)器 正確使用方法
//初始化先 private Handler handler; @Override protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);handler = new Handler(); Runnable runnable = new Runnable() { @Override public void run() {// 這個(gè)是循環(huán) 間隔3s彈一次Toasthandler.postDelayed(this, 3 *1000);Toast.makeText(this, '延時(shí)5s', Toast.LENGTH_SHORT).show(); }};// 延遲2s彈Toasathandler.postDelayed(runnable,2000); } @Override protected void onDestroy() {super.onDestroy();//在頁面結(jié)束時(shí) 清空隊(duì)列消息if (handler != null) { handler.removeCallbacksAndMessages(null); handler = null;} }
到此這篇關(guān)于Android Handler的postDelayed()關(guān)閉的方法的文章就介紹到這了,更多相關(guān)Android Handler的postDelayed()關(guān)閉內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!
相關(guān)文章:
1. JAMon(Java Application Monitor)備忘記2. 如何用 Python 制作一個(gè)迷宮游戲3. NetCore 配置Swagger的詳細(xì)代碼4. IntelliJ IDEA設(shè)置默認(rèn)瀏覽器的方法5. 讓chatgpt將html中的圖片轉(zhuǎn)為base64方法示例6. Python PyQt5中彈出子窗口解決子窗口一閃而過的問題7. Python基于pyjnius庫實(shí)現(xiàn)訪問java類8. idea自定義快捷鍵的方法步驟9. idea配置jdk的操作方法10. Java SE 6中JDBC 4.0的增強(qiáng)特性
