亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Android Handler的postDelayed()關(guān)閉的方法及遇到問題

 更新時(shí)間:2021年04月21日 14:32:49   作者:呂氏春秋i  
這篇文章主要介紹了Android Handler的postDelayed()關(guān)閉的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

前言

最近在使用Handler的時(shí)候 發(fā)現(xiàn)了一個(gè)錯(cuò)誤的使用方法

就是直接new 類似這樣

new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                showPaySuccessDialog.dismiss();
            }
        }, 1000);

這種用法對(duì)于業(yè)務(wù)簡單的情況 也沒錯(cuò) 比如 定時(shí)關(guān)閉一個(gè)dialog

但是對(duì)于復(fù)雜的業(yè)務(wù)場景 這么用是不對(duì)的 也不是不對(duì)吧 這么用的話有bug

遇到的問題

我用 直接new Handler()的方法去執(zhí)行一個(gè)播放語音的方法
代碼如下

//todo 此處檢測(cè)
  new Handler().postDelayed(new Runnable() {
                @Override
                public void run() {
                    if (!MediaplayerUtil.isPlaying()) {
                        MediaplayerUtil.playMusic(context, R.raw.pay_tips);
                    }
                }
            }, 15 * 1000);

我以為這樣寫沒錯(cuò) 但是在測(cè)試的時(shí)候 出現(xiàn)了一個(gè)問題
頁面都關(guān)閉了 這個(gè)語音播報(bào) 還在繼續(xù) 哈哈哈 我同事聽到都驚呆了
頁面都沒有了 語音還在播放 很尷尬
當(dāng)時(shí)聽到這個(gè)語音 我一耳就聽出了問題

因?yàn)楫?dāng)時(shí)這么寫 就覺得不對(duì)勁 可能會(huì)出問題 所以我加了一個(gè)TODO標(biāo)記
提示這里可能會(huì)出問題

解決方法

歸根結(jié)底 還是我的寫法問題 不夠正規(guī) 偷懶行為 哈哈哈

1、首先創(chuàng)建一個(gè)Handler對(duì)象

Handler handler=new Handler();

2、然后創(chuàng)建一個(gè)Runnable對(duì)象

Runnable runnable=new Runnable(){
   @Override
   public void run() {
	    // TODO Auto-generated method stub
   	    //要做的事情,這里再次調(diào)用此Runnable對(duì)象,以實(shí)現(xiàn)每兩秒實(shí)現(xiàn)一次的定時(shí)器操作
    handler.postDelayed(this, 2000);
   }
};

3、使用PostDelayed方法,兩秒后調(diào)用此Runnable對(duì)象

實(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彈一次Toast
                handler.postDelayed(this, 3 *1000);
                Toast.makeText(this, "延時(shí)5s", Toast.LENGTH_SHORT).show();
            }
        };
        // 延遲2s彈Toasat
        handler.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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論