android sdk android handler能不能傳遞較多數(shù)據(jù)?
android handler能不能傳遞較多數(shù)據(jù)?這沒(méi)有問(wèn)題:處理程序主要接受子線程發(fā)送的數(shù)據(jù),并使用這些數(shù)據(jù)用主線程更新UI。說(shuō)明:當(dāng)應(yīng)用程序啟動(dòng)時(shí),Android將首先打開一個(gè)主線程(即UI線程)
android handler能不能傳遞較多數(shù)據(jù)?
這沒(méi)有問(wèn)題:處理程序主要接受子線程發(fā)送的數(shù)據(jù),并使用這些數(shù)據(jù)用主線程更新UI。說(shuō)明:當(dāng)應(yīng)用程序啟動(dòng)時(shí),Android將首先打開一個(gè)主線程(即UI線程)。主線程是管理界面中用于分發(fā)事件的UI控件。例如,如果您單擊一個(gè)按鈕,Android將向該按鈕分發(fā)事件以響應(yīng)該操作。如果此時(shí)需要一個(gè)耗時(shí)的操作,例如在Internet上讀取數(shù)據(jù)或讀取一個(gè)大的本地文件,那么這些操作不能放在主線程中。如果將它們放在主線程中,接口將假裝死亡。如果沒(méi)有在5秒內(nèi)完成,Android系統(tǒng)將收到錯(cuò)誤提示“強(qiáng)制關(guān)機(jī)”。此時(shí),我們需要將這些耗時(shí)的操作放在一個(gè)子線程中,因?yàn)樽泳€程涉及UI更新,而Android主線程是不安全的,也就是說(shuō),UI更新只能在主線程中進(jìn)行,子線程中的操作是危險(xiǎn)的。此時(shí),處理程序出現(xiàn)。為了解決這個(gè)復(fù)雜的問(wèn)題,由于處理程序在主線程(UI線程)中運(yùn)行,它和子線程可以通過(guò)消息對(duì)象傳遞數(shù)據(jù)。此時(shí),處理程序負(fù)責(zé)接受子線程傳遞的消息對(duì)象(包含數(shù)據(jù))(子線程通過(guò)sedmessage()方法傳遞消息對(duì)象),將這些消息放入主線程隊(duì)列,并與主線程協(xié)作更新UI。
Android在子線程用handler發(fā)送的消息,主線程是怎么loop到的?
可訪問(wèn)
!但是,您不能在非UI線程(子線程)中創(chuàng)建處理程序。因此處理程序應(yīng)該在UI線程(主線程)中創(chuàng)建,然后在非UI線程(子線程)中使用。
例如,您可以在UI線程(主線程)中創(chuàng)建:handlerhandler=newhandler()
,然后在非UI線程(子線程)中使用它handler.sendEmptyMessage文件(0)
這樣您就可以通過(guò)多線程處理Android用戶界面,這是異步處理用戶界面的幾種方法之一。
希望對(duì)您有所幫助!