千家信息网

Android中怎么使用flow实现倒计时

发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,本篇内容主要讲解"Android中怎么使用flow实现倒计时",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Android中怎么使用flow实现倒计时"吧!
千家信息网最后更新 2025年01月20日Android中怎么使用flow实现倒计时

本篇内容主要讲解"Android中怎么使用flow实现倒计时",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Android中怎么使用flow实现倒计时"吧!

现在因为有了协程和Flow,我们可以借助Flow这个工具,更加优雅地实现这个需求功能.

1.依赖导入

    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. 代码实现

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? = nullmBinding.btnStart.setOnClickListener {    mCountdownJob = countDownCoroutines(60, lifecycleScope,        onTick = { second ->            mBinding.text.text = "${second}s后重发"        }, onStart = {            // 倒计时开始        }, onFinish = {            // 倒计时结束,重置状态            mBinding.text.text = "发送验证码"        })}mBinding.btnStop.setOnClickListener {     // 取消倒计时    mCountdownJob?.cancel()

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

补充:

下面是小编收集整理Android 实现倒计时的几种方式

使用 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毫秒执行一次onTick//倒计时完成执行onFinishCountDownTimer 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; }

到此,相信大家对"Android中怎么使用flow实现倒计时"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

0