您好,登錄后才能下訂單哦!
本篇內容主要講解“Android中怎么使用flow實現倒計時”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Android中怎么使用flow實現倒計時”吧!
現在因為有了協程和Flow,我們可以借助Flow這個工具,更加優雅地實現這個需求功能.
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"
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) }
private var mCountdownJob: Job? = null mBinding.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 實現倒計時的幾種方式
/** * 開始 */ 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; } }
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 //每過1000毫秒執行一次onTick //倒計時完成執行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; }
到此,相信大家對“Android中怎么使用flow實現倒計時”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。