在android開(kāi)發(fā)過(guò)程中,我們經(jīng)常有通過(guò)子線程來(lái)更新界面UI的需求,而android是不允許子線程更新界面的,只能通過(guò)主線程來(lái)更新界面UI,而且,android開(kāi)發(fā)中,由于要保證主線程的通暢,一般主線程只負(fù)責(zé)處理界面更新,事件處理,窗體顯示的回調(diào)等重要且不耗時(shí)的操作,而像連接網(wǎng)絡(luò),io操作等,一般讓子進(jìn)程負(fù)責(zé)。
成都創(chuàng)新互聯(lián)專(zhuān)注于陜西網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供陜西營(yíng)銷(xiāo)型網(wǎng)站建設(shè),陜西網(wǎng)站制作、陜西網(wǎng)頁(yè)設(shè)計(jì)、陜西網(wǎng)站官網(wǎng)定制、微信平臺(tái)小程序開(kāi)發(fā)服務(wù),打造陜西網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供陜西網(wǎng)站排名全網(wǎng)營(yíng)銷(xiāo)落地服務(wù)。
所以,android提供了一種消息機(jī)制來(lái)實(shí)現(xiàn)子線程更新UI的需求,android提供Handler類(lèi),用于子線程和主進(jìn)程交互。在主進(jìn)程中,聲明實(shí)例化一個(gè)Handler,并重寫(xiě)它的handleMessage方法。
private Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { int i = (Integer) msg.obj; tView.setText("hello world "+i); super.handleMessage(msg); } };
在子線程中,調(diào)用的Handler的sendMessage方法,android主線程就會(huì)調(diào)用HandleMessage方法來(lái)處理。
Thread thread = new Thread(){ @Override public void run() { for (int i = 0; i < 1000; i++) { try { sleep(500); } catch (Exception e) { // TODO: handle exception } Message msg = new Message(); msg.obj = i; handler.sendMessage(msg); } super.run(); }
Handler