最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android?使用flow實現(xiàn)倒計時的方式

 更新時間:2022年04月22日 15:03:26   作者:i小灰  
這篇文章主要介紹了Android?使用flow實現(xiàn)倒計時的方式,借助Flow這個工具,更加優(yōu)雅地實現(xiàn)這個需求功能,文末給大家整理了Android?實現(xiàn)倒計時的幾種方式,需要的朋友可以參考下

Android 倒計時一般實現(xiàn)方式:

  • handler+postDelayed() 方式
  • Timer + TimerTask + handler 方式
  • ScheduledExecutorService + handler 方式
  • RxJava 方式
  • CountDownTimer 方式

現(xiàn)在因為有了協(xié)程和Flow,我們可以借助Flow這個工具,更加優(yōu)雅地實現(xiàn)這個需求功能.

1.依賴導(dǎo)入

    api 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.4.2'
    api 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.4.1'
    // lifecycleScope(可選)
    api "androidx.lifecycle:lifecycle-runtime-ktx:2.2.0"

2. 代碼實現(xiàn)

fun countDownCoroutines(
    total: Int,
    scope: CoroutineScope,
    onTick: (Int) -> Unit,
    onStart: (() -> Unit)? = null,
    onFinish: (() -> Unit)? = null,
): Job {
    return flow {
        for (i in total downTo 0) {
            emit(i)
            delay(1000)
        }
    }.flowOn(Dispatchers.Main)
        .onStart { onStart?.invoke() }
        .onCompletion { onFinish?.invoke() }
        .onEach { onTick.invoke(it) }
        .launchIn(scope)
}

2.1使用:

private var mCountdownJob: Job? = null

mBinding.btnStart.setOnClickListener {
    mCountdownJob = countDownCoroutines(60, lifecycleScope,
        onTick = { second ->
            mBinding.text.text = "${second}s后重發(fā)"
        }, onStart = {
            // 倒計時開始
        }, onFinish = {
            // 倒計時結(jié)束,重置狀態(tài)
            mBinding.text.text = "發(fā)送驗證碼"
        })
}
mBinding.btnStop.setOnClickListener { 
    // 取消倒計時
    mCountdownJob?.cancel() 

其他的完整Demo https://github.com/dahui888/kotlinpractice

補充:

下面是小編收集整理Android 實現(xiàn)倒計時的幾種方式

使用 Timer方式:

? /**
? ? ?* 開始
? ? ?*/
? ? public void startTimer() {
? ? ? ? if (timer == null) {
? ? ? ? ? ? timer = new Timer();
? ? ? ? }
? ? ? ? if (timerTask == null) {
? ? ? ? ? ? timerTask = new TimerTask() {
? ? ? ? ? ? ? ? @Override
? ? ? ? ? ? ? ? public void run() {
? ? ? ? ? ? ? ? ? ? Message message = new Message();
? ? ? ? ? ? ? ? ? ? message.what = 2;
? ? ? ? ? ? ? ? ? ? handler.sendMessage(message);
? ? ? ? ? ? ? ? }
? ? ? ? ? ? };
? ? ? ? }
? ? ? ? if (timer != null && timerTask != null) {
? ? ? ? ? ? timer.schedule(timerTask, 0, 2000);
? ? ? ? }
? ? }
? ? /**
? ? ?* 暫停定時器
? ? ?*/
? ? public void stopTimer() {
? ? ? ? if (timer != null) {
? ? ? ? ? ? timer.cancel();
? ? ? ? ? ? timer = null;
? ? ? ? }
? ? ? ? if (timerTask != null) {
? ? ? ? ? ? timerTask.cancel();
? ? ? ? ? ? timerTask = null;
? ? ? ? }
? ? }

使用rxjava方式:

 ?private void countDown() {
? ? ? ? mdDisposable = Flowable.intervalRange(0, Constant.COUNT_DOWN, 0, ? ? ? ? ? ? ? ? ? ? 1,TimeUnit.SECONDS)
? ? ? ? ? ? ? ? .observeOn(AndroidSchedulers.mainThread())
? ? ? ? ? ? ? ? .doOnNext((aLong) -> LogUtils.e("倒計時--" + aLong))
? ? ? ? ? ? ? ? .doOnComplete(() -> randomSelectSeat())
? ? ? ? ? ? ? ? .subscribe();
? ? }
? ? /**
? ? ?* 銷毀
? ? ?*/
? ? ?@Override
? ? protected void onDestroy() {
? ? ? ? if (mdDisposable != null) {
? ? ? ? ? ? mdDisposable.dispose();
? ? ? ? }
? ? ? ? super.onDestroy();
? ? }

使用CountDownTimer方式:

//倒計時CountDownTimer
//每過1000毫秒執(zhí)行一次onTick
//倒計時完成執(zhí)行onFinish
CountDownTimer timer = new CountDownTimer(5000, 1000){
? ? @Override
? ? public void onTick(long sin) {
? ? ? ? Toast.makeText(MainActivity.this, "" + sin/1000, Toast.LENGTH_SHORT).show();
? ? }
?
? ? @Override
? ? public void onFinish() {
? ? ? ? Toast.makeText(MainActivity.this, "倒計時完成", Toast.LENGTH_SHORT).show();
? ? }
};
//開始
timer.start();
//暫停
if (timer != null) {
? ? ?timer.cancel();
? ? ?timer = null;
?}

到此這篇關(guān)于Android 使用flow實現(xiàn)倒計時的方式的文章就介紹到這了,更多相關(guān)android flow倒計時內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Android布局技巧之創(chuàng)建可重用的UI組件

    Android布局技巧之創(chuàng)建可重用的UI組件

    這篇文章主要為大家詳細介紹了Android布局技巧之創(chuàng)建可重用的UI組件,文中提到了include標(biāo)簽的使用方法,感興趣的小伙伴們可以參考一下
    2016-05-05
  • Android編程之菜單實現(xiàn)方法

    Android編程之菜單實現(xiàn)方法

    這篇文章主要介紹了Android編程之菜單實現(xiàn)方法,以實例形式較為詳細的分析了Android編程實現(xiàn)菜單的布局及功能相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-11-11
  • Android編程之Application設(shè)置全局變量及傳值用法實例分析

    Android編程之Application設(shè)置全局變量及傳值用法實例分析

    這篇文章主要介紹了Android編程之Application設(shè)置全局變量及傳值用法,結(jié)合實例形式較為詳細的分析了全局變量及傳值的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-12-12
  • Android?文件存儲系統(tǒng)原理

    Android?文件存儲系統(tǒng)原理

    這篇文章主要介紹了Android?文件存儲系統(tǒng)原理,Android?的文件系統(tǒng)類似于其他平臺的基于磁盤的文件系統(tǒng),包括好幾種類別具體詳情感興趣得朋友可以參考一下文章內(nèi)容
    2022-06-06
  • Android控件之AnalogClock與DigitalClock用法實例分析

    Android控件之AnalogClock與DigitalClock用法實例分析

    這篇文章主要介紹了Android控件之AnalogClock與DigitalClock用法,以實例形式分析了Android時鐘控件AnalogClock和DigitalClock用于顯示時間的具體使用技巧,需要的朋友可以參考下
    2015-09-09
  • Android中WebView常見問題及解決方案匯總

    Android中WebView常見問題及解決方案匯總

    本篇文章主要介紹了Android中WebView常見問題及解決方案匯總,把WebView遇到的問題詳細的羅列下來,有需要的朋友可以了解一下。
    2016-11-11
  • 解決AMD無法使用Android studio問題

    解決AMD無法使用Android studio問題

    這篇文章主要介紹了AMD無法使用Android studio解決方法,本文通過圖文實例相結(jié)合給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-03-03
  • Android設(shè)計模式之單例模式實例

    Android設(shè)計模式之單例模式實例

    這篇文章主要介紹了Android設(shè)計模式之單例模式實例,單例模式是運用最廣泛的設(shè)計模式之一,在應(yīng)用這個模式時,單例模式的類必須保證只有一個實例存在
    2023-04-04
  • Android編程中Perferences的用法實例分析

    Android編程中Perferences的用法實例分析

    這篇文章主要介紹了Android編程中Perferences的用法,以實例形式較為詳細的分析了配置文件preferences.xml的功能、定義及使用方法,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-11-11
  • Android自定義彈框Dialog效果

    Android自定義彈框Dialog效果

    這篇文章主要為大家詳細介紹了Android自定義彈框Dialog效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04

最新評論

上栗县| 灵川县| 二连浩特市| 专栏| 左贡县| 民权县| 米泉市| 韶山市| 富蕴县| 兴海县| 灌云县| 镇远县| 承德市| 二连浩特市| 瓮安县| 嘉义县| 连云港市| 堆龙德庆县| 徐闻县| 富民县| 德惠市| 柏乡县| 清水河县| 闵行区| 济阳县| 湘潭市| 巴林左旗| 南华县| 江口县| 桂阳县| 东源县| 万宁市| 南漳县| 万安县| 泗洪县| 从江县| 综艺| 高安市| 年辖:市辖区| 万荣县| 浮梁县|