iT邦幫忙

2021 iThome 鐵人賽

DAY 20
0
自我挑戰組

Android Studio 初學者的30天筆記系列 第 20

DAY20:ANR程式無回應之簡介

  • 分享至 

  • xImage
  •  

今天要介紹到的是ANR也就是程式無回應,我們有時候使用一些程式會遇到那種lag很久,最後卻是無回應的狀況,能解決問題的關鍵方法就是使用非同步執行來執行程式。
沒有特別設計下,所有任務都會在Main Thread上執行,可以想像成假設今天我們的第一個任務卡關了,連帶影響後面的任務進行,這時就會出現ANR,這時候我們就要用非同步執行的處理方式,將第一個卡關的任務放到Back Thread,等於分成兩條線進行。

要寫出最簡單的Thread首先先呼叫Runnable()介面,將我們要執行的寫在Runnable裡頭,再使用Thread.start()來啟動。
產生的Background Thread不是UI Thread,因此Background Thread的任務需要操作畫面時,就必須與UI Thread溝通,需要用到Handler類別,它是一種跨Thread的溝通機制,必須再加入其他程式碼。

接著,要介紹的是AsyncTask類別,它可以方便執行非同步操作,簡單地達成Handler跟Thread跟Messange的功能,我們須先定義整個流程中輸出及輸入的資料型態,一開始會先帶三個標籤<Int,Void,String>這三個分別依序代表輸入的資料型態,更新的資料型態,輸出的資料型態。
繼續介紹AsyncTask的四種方法:
1.onPreExcute():會在一開始非同步執行時被執行,功能是初始化資訊,或保存一些變數在AsyncTask的區域變數之中。
2.doInBackgroung():唯一執行於新Thread的方法,也是唯一必須被實作的方法,執行於其中的方法會獨立執行並且完成後回傳。
3.onProgressUpdate():功能是監聽doInBackgroung()的進度,可搭配ProgressBar來實現進度條。
4.onPostExecute():功能在於處理任務結束後的結果,對結果進行後續處理。


上一篇
DAY19:進階清單元件之實作
下一篇
DAY21:AsyncTask類別之實作
系列文
Android Studio 初學者的30天筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言