亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

android中UI主線(xiàn)程與子線(xiàn)程深入分析

 更新時(shí)間:2015年02月10日 16:50:23   作者:woshisap  
這篇文章主要介紹了android中UI主線(xiàn)程與子線(xiàn)程,以實(shí)例形式較為深入的分析了UI主線(xiàn)程與子線(xiàn)程的運(yùn)行原理與操作技巧,有助于深入了解Android程序設(shè)計(jì),需要的朋友可以參考下

本文較為深入的分析了android中UI主線(xiàn)程與子線(xiàn)程。分享給大家供大家參考。具體如下:

在一個(gè)Android 程序開(kāi)始運(yùn)行的時(shí)候,會(huì)單獨(dú)啟動(dòng)一個(gè)Process。默認(rèn)的情況下,所有這個(gè)程序中的Activity或者Service(Service和 Activity只是Android提供的Components中的兩種,除此之外還有Content Provider和Broadcast Receiver)都會(huì)跑在這個(gè)Process。

一個(gè)Android 程序默認(rèn)情況下也只有一個(gè)Process,但一個(gè)Process下卻可以有許多個(gè)Thread。在這么多Thread當(dāng)中,有一個(gè)Thread,我們稱(chēng)之為UI Thread。UI Thread在Android程序運(yùn)行的時(shí)候就被創(chuàng)建,是一個(gè)Process當(dāng)中的主線(xiàn)程Main Thread,主要是負(fù)責(zé)控制UI界面的顯示、更新和控件交互。在Android程序創(chuàng)建之初,一個(gè)Process呈現(xiàn)的是單線(xiàn)程模型,所有的任務(wù)都在一個(gè)線(xiàn)程中運(yùn)行。因此,我們認(rèn)為,UI Thread所執(zhí)行的每一個(gè)函數(shù),所花費(fèi)的時(shí)間都應(yīng)該是越短越好。而其他比較費(fèi)時(shí)的工作(訪(fǎng)問(wèn)網(wǎng)絡(luò),下載數(shù)據(jù),查詢(xún)數(shù)據(jù)庫(kù)等),都應(yīng)該交由子線(xiàn)程去執(zhí)行,以免阻塞主線(xiàn)程。

那么,UI Thread如何和其他Thread一起工作呢?常用方法是:誕生一個(gè)主線(xiàn)程的Handler物件,當(dāng)做Listener去讓子線(xiàn)程能將訊息Push到主線(xiàn)程的Message Quene里,以便觸發(fā)主線(xiàn)程的handlerMessage()函數(shù),讓主線(xiàn)程知道子線(xiàn)程的狀態(tài),并在主線(xiàn)程更新UI。

例如,在子線(xiàn)程的狀態(tài)發(fā)生變化時(shí),我們需要更新UI。如果在子線(xiàn)程中直接更新UI,通常會(huì)拋出下面的異常:

11-07 13:33:04.393: ERROR/JavaBinder(1029):android.view.ViewRoot$CalledFromWrongThreadException:Only the original thread that created a view hierarchy can touch its views.

意思是,無(wú)法在子線(xiàn)程中更新UI。為此,我們需要通過(guò)Handler物件,通知主線(xiàn)程Ui Thread來(lái)更新界面。

如下,首先創(chuàng)建一個(gè)Handler,來(lái)監(jiān)聽(tīng)Message的事件:

private final int UPDATE_UI = 1;
private Handler mHandler = new MainHandler();

private class MainHandler extends Handler {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case UPDATE_UI: {
Log.i("TTSDeamon", "UPDATE_UI");
showTextView.setText(editText.getText().toString());
ShowAnimation();
break;
}
default:
break;
}
}
}

或者:

private Handler mHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case UPDATE_UI: {
Log.i("TTSDeamon", "UPDATE_UI");
showTextView.setText(editText.getText().toString());
ShowAnimation();
break;
}
default:
break;
}
}
}

當(dāng)子線(xiàn)程的狀態(tài)發(fā)生變化,則在子線(xiàn)程中發(fā)出Message,通知更新UI。

mHandler.sendEmptyMessageDelayed(UPDATE_UI, 0);

在我們的程序中,很多Callback方法有時(shí)候并不是運(yùn)行在主線(xiàn)程當(dāng)中的,所以如果在Callback方法中更新UI失敗,也可以采用上面的方法。

希望本文所述對(duì)大家的Android程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • android studio 一直卡在Gradle:Build Running的幾種解決辦法

    android studio 一直卡在Gradle:Build Running的幾種解決辦法

    這篇文章主要介紹了android studio 一直卡在Gradle:Build Running的解決辦法,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2017-10-10
  • Android實(shí)現(xiàn)字母導(dǎo)航控件的示例代碼

    Android實(shí)現(xiàn)字母導(dǎo)航控件的示例代碼

    這篇文章主要介紹了通過(guò)自定義View實(shí)現(xiàn)字母導(dǎo)航控件的示例代碼,文中的實(shí)現(xiàn)過(guò)程講解詳細(xì),對(duì)我們學(xué)習(xí)或工作有一定幫助,感興趣的可以學(xué)習(xí)一下
    2022-01-01
  • Android通過(guò)Socket與服務(wù)器之間進(jìn)行通信的示例

    Android通過(guò)Socket與服務(wù)器之間進(jìn)行通信的示例

    這篇文章主要介紹了Android通過(guò)Socket與服務(wù)器之間進(jìn)行通信的示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-12-12
  • Android 圖片緩存機(jī)制的深入理解

    Android 圖片緩存機(jī)制的深入理解

    這篇文章主要介紹了Android 圖片緩存機(jī)制的深入理解的相關(guān)資料,這里提供了實(shí)現(xiàn)實(shí)例幫助大家理解圖片緩存機(jī)制的知識(shí),需要的朋友可以參考下
    2017-08-08
  • Android仿微信通訊錄打造帶懸停頭部的分組列表(上)

    Android仿微信通訊錄打造帶懸停頭部的分組列表(上)

    這篇文章主要介紹了Android仿微信通訊錄導(dǎo)航分組列表,使用ItemDecoration為RecyclerView打造帶懸停頭部的分組列表,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-08-08
  • Android使用shape繪制陰影圖層陰影效果示例

    Android使用shape繪制陰影圖層陰影效果示例

    本篇文章主要介紹了Android使用shape繪制陰影圖層陰影效果示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-06-06
  • 解析Android ANR問(wèn)題

    解析Android ANR問(wèn)題

    ANR 的全稱(chēng)是 Application No Responding,即應(yīng)用程序無(wú)響應(yīng),具體是一些特定的 Message (Key Dispatch、Broadcast、Service) 在應(yīng)用的UI線(xiàn)程(主線(xiàn)程)沒(méi)有在規(guī)定的時(shí)間內(nèi)處理完,進(jìn)而觸發(fā) ANR 異常
    2021-01-01
  • Android四種常見(jiàn)布局方式示例教程

    Android四種常見(jiàn)布局方式示例教程

    Android四種布局有線(xiàn)性布局LinearLayout、相對(duì)布局RelativeLayout、網(wǎng)格布局GridLayout、和滾動(dòng)視圖ScrollView,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧
    2022-09-09
  • 在不同Activity之間傳遞數(shù)據(jù)的四種常用方法

    在不同Activity之間傳遞數(shù)據(jù)的四種常用方法

    這篇文章主要介紹了在不同Activity之間傳遞數(shù)據(jù)的四種常用方法 的相關(guān)資料,需要的朋友可以參考下
    2016-03-03
  • android表格效果之ListView隔行變色實(shí)現(xiàn)代碼

    android表格效果之ListView隔行變色實(shí)現(xiàn)代碼

    首先繼承SimpleAdapter再使用重載的Adapter來(lái)達(dá)到效果,其實(shí)主要是需要重載SimpleAdapter,感興趣的朋友可以研究下,希望本文可以幫助到你
    2013-02-02

最新評(píng)論