iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 10
0
Software Development

Kotlin 30 天,通過每天一個小 demo 學習 Android 開發系列 第 10

Kotlin 開發第 10 天 ProgressControl ( ProgressBar + Handler )

ProgressControl

這次通過 Handler 來定時增加 progressBar 的進度,iOS 中可以利用 Timer 來達成。

  • 提供三個按鈕來操作進度、一個 TextView 顯示進度文字。
  • Start – 每 500 毫秒增加進度 10
  • Pause – 暫停任務
  • Stop – 停止任務並且將進度改為 0
  • 執行任務過程中如果發現進度超過最大值,則停止任務。

ProgressControl

Thread

和 iOS 一樣,在 App 啟動後,系統會建立一個進程,這個進程裡面會有一個主線程,也就是 UI 線程。

所以和開發 iOS 的過程一樣,當使用多線程處理數據並且要更新 UI 的時候,要記得回到主線程上。

Handler & Runnable

我們可以通過 Handler 搭配 Runnable 來達到可以重複執行任務的功能。

Handler

Handler 會讓我想到 iOS 中的 Dispatch 可以執行任務和建立隊列。

  • handleMessage(Message) - 對接受到的消息進行處理
  • post(Runnable) - Runnable  - 對象入隊
  • postAtTime(Runnable, long)  - 指定時間入隊
  • postDelayed(Runnable, long) - 延長指定的時間入隊
  • sendEmptyMessage(Int) - 發送只有標示(int) 的信息
  • sendMessage(Message) - 發送信息
  • sendMessageAtTime(Message, long)  - 在指定時間發送信息
  • sendMessageDelayed(Message, long) - 延長指定的時間發送消息
    Runnable 是一個抽象類,提供一個 run() 方法,用來執行任務。
    private var runnable = object:Runnable{
        override fun run() {
            startIncreaseProgress()
        }

    }

準備 taskHandler

private var taskHandler = Handler()

通過 postDelayed(Runnable r, long delayMillis) 來開始一個任務,需要提供 runnable 以及執行間隔時間(毫秒)

    // start task
    taskHandler.postDelayed(runnable, repeatTaskTime)

removeCallbacksAndMessages(Object token) 用來取消任務

    // cancle task
    taskHandler.removeCallbacksAndMessages(null)

筆記

研究:Handler / Message / MessageQueue / Looper 會在之後的動手做中專門練習一下。

參考


上一篇
Kotlin 開發第 9 天 ImageSlider (ViewPager)
下一篇
Kotlin 開發第 11 天 Alarm ( DatePickerDialog + AlertDialog)
系列文
Kotlin 30 天,通過每天一個小 demo 學習 Android 開發30

尚未有邦友留言

立即登入留言