Android Handler的postDelayed()關(guān)閉的方法及遇到問題
前言
最近在使用Handler的時候 發(fā)現(xiàn)了一個錯誤的使用方法
就是直接new 類似這樣
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
showPaySuccessDialog.dismiss();
}
}, 1000);
這種用法對于業(yè)務(wù)簡單的情況 也沒錯 比如 定時關(guān)閉一個dialog
但是對于復(fù)雜的業(yè)務(wù)場景 這么用是不對的 也不是不對吧 這么用的話有bug
遇到的問題
我用 直接new Handler()的方法去執(zhí)行一個播放語音的方法
代碼如下
//todo 此處檢測
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
if (!MediaplayerUtil.isPlaying()) {
MediaplayerUtil.playMusic(context, R.raw.pay_tips);
}
}
}, 15 * 1000);
我以為這樣寫沒錯 但是在測試的時候 出現(xiàn)了一個問題
頁面都關(guān)閉了 這個語音播報 還在繼續(xù) 哈哈哈 我同事聽到都驚呆了
頁面都沒有了 語音還在播放 很尷尬
當(dāng)時聽到這個語音 我一耳就聽出了問題
因為當(dāng)時這么寫 就覺得不對勁 可能會出問題 所以我加了一個TODO標(biāo)記
提示這里可能會出問題
解決方法
歸根結(jié)底 還是我的寫法問題 不夠正規(guī) 偷懶行為 哈哈哈
1、首先創(chuàng)建一個Handler對象
Handler handler=new Handler();
2、然后創(chuàng)建一個Runnable對象
Runnable runnable=new Runnable(){
@Override
public void run() {
// TODO Auto-generated method stub
//要做的事情,這里再次調(diào)用此Runnable對象,以實現(xiàn)每兩秒實現(xiàn)一次的定時器操作
handler.postDelayed(this, 2000);
}
};
3、使用PostDelayed方法,兩秒后調(diào)用此Runnable對象
實際上也就實現(xiàn)了一個2s的一個定時器
handler.postDelayed(runnable, 2000);
4、如果想要關(guān)閉此定時器,可以這樣操作
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() {
// 這個是循環(huán) 間隔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();
//在頁面結(jié)束時 清空隊列消息
if (handler != null) {
handler.removeCallbacksAndMessages(null);
handler = null;
}
}
到此這篇關(guān)于Android Handler的postDelayed()關(guān)閉的方法的文章就介紹到這了,更多相關(guān)Android Handler的postDelayed()關(guān)閉內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Android Gradle多渠道打包的實現(xiàn)方法
這篇文章主要介紹了Android Gradle多渠道打包的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11
Android SQLite數(shù)據(jù)庫增刪改查操作的使用詳解
本篇文章介紹了,在Android中SQLite數(shù)據(jù)庫增刪改查操作的使用詳解。需要的朋友參考下2013-04-04
Android onKeyDown監(jiān)聽返回鍵無效的解決辦法
這篇文章主要介紹了 Android onKeyDown監(jiān)聽返回鍵無效的解決辦法的相關(guān)資料,需要的朋友可以參考下2017-06-06
Android自定義帶有圓形進(jìn)度條的可長按控件功能
這篇文章主要介紹了Android自定義帶有圓形進(jìn)度條的可長按控件,思路很簡單,使用簡單的畫筆工具就可以完成這個控件,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧2022-06-06
Android Secret Code(輸入字符彈出手機(jī)信息)詳解
這篇文章主要介紹了Android Secret Code(輸入字符彈出手機(jī)信息)詳解的相關(guān)資料,需要的朋友可以參考下2016-11-11
Android使用SharedPreferences存儲XML文件的實現(xiàn)方法
這篇文章主要介紹了Android使用SharedPreferences存儲XML文件的實現(xiàn)方法,實例分析了SharedPreferences類的基本初始化與文件存儲相關(guān)技巧,需要的朋友可以參考下2016-07-07

