溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android Handler的postDelayed()怎么關閉

發布時間:2021-05-06 10:36:23 來源:億速云 閱讀:805 作者:小新 欄目:開發技術

這篇文章主要介紹Android Handler的postDelayed()怎么關閉,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

Android是什么

Android是一種基于Linux內核的自由及開放源代碼的操作系統,主要使用于移動設備,如智能手機和平板電腦,由美國Google公司和開放手機聯盟領導及開發。

前言

最近在使用Handler的時候 發現了一個錯誤的使用方法

就是直接new 類似這樣

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

這種用法對于業務簡單的情況 也沒錯 比如 定時關閉一個dialog

但是對于復雜的業務場景 這么用是不對的 也不是不對吧 這么用的話有bug

遇到的問題

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

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

我以為這樣寫沒錯 但是在測試的時候 出現了一個問題
頁面都關閉了 這個語音播報 還在繼續 哈哈哈 我同事聽到都驚呆了
頁面都沒有了 語音還在播放 很尷尬
當時聽到這個語音 我一耳就聽出了問題

因為當時這么寫 就覺得不對勁 可能會出問題 所以我加了一個TODO標記
提示這里可能會出問題

解決方法

歸根結底 還是我的寫法問題 不夠正規 偷懶行為 哈哈哈

1、首先創建一個Handler對象

Handler handler=new Handler();

2、然后創建一個Runnable對象

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

3、使用PostDelayed方法,兩秒后調用此Runnable對象

實際上也就實現了一個2s的一個定時器

handler.postDelayed(runnable, 2000);

4、如果想要關閉此定時器,可以這樣操作

handler.removeCallbacks(runnable);

Handler 定時器 正確使用方法

//初始化先
 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() {
                // 這個是循環 間隔3s彈一次Toast
                handler.postDelayed(this, 3 *1000);
                Toast.makeText(this, "延時5s", Toast.LENGTH_SHORT).show();
            }
        };
        // 延遲2s彈Toasat
        handler.postDelayed(runnable,2000);
    }
 
    @Override
    protected void onDestroy() {
        super.onDestroy();
        //在頁面結束時 清空隊列消息
        if (handler != null) {
            handler.removeCallbacksAndMessages(null);
            handler = null;
        }
    }

以上是“Android Handler的postDelayed()怎么關閉”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女