最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

android中UI主線程與子線程深入分析

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

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

在一個Android 程序開始運行的時候,會單獨啟動一個Process。默認的情況下,所有這個程序中的Activity或者Service(Service和 Activity只是Android提供的Components中的兩種,除此之外還有Content Provider和Broadcast Receiver)都會跑在這個Process。

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

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

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

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.

意思是,無法在子線程中更新UI。為此,我們需要通過Handler物件,通知主線程Ui Thread來更新界面。

如下,首先創(chuàng)建一個Handler,來監(jiān)聽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;
}
}
}

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

mHandler.sendEmptyMessageDelayed(UPDATE_UI, 0);

在我們的程序中,很多Callback方法有時候并不是運行在主線程當中的,所以如果在Callback方法中更新UI失敗,也可以采用上面的方法。

希望本文所述對大家的Android程序設計有所幫助。

相關文章

  • 阿里路由框架ARouter 源碼解析之Compiler

    阿里路由框架ARouter 源碼解析之Compiler

    這篇文章主要介紹了阿里路由框架ARouter 源碼解析之Compiler,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07
  • 詳解Android性能優(yōu)化之啟動優(yōu)化

    詳解Android性能優(yōu)化之啟動優(yōu)化

    一款應用的第一印象很重要,第一印象往往決定了用戶的去留。打開一款應用,如果速度很快,很順暢,那么很容易讓人覺得這款應用背后的技術實力很強,用戶潛意識中會對這款應用更加的信賴。本文將詳細介紹Android性能優(yōu)化之啟動優(yōu)化。
    2021-06-06
  • Android WebView 緩存詳解

    Android WebView 緩存詳解

    這篇文章主要介紹了 Android WebView 緩存詳解的相關資料,需要的朋友可以參考下
    2017-06-06
  • Android 畫中畫模式的實現示例

    Android 畫中畫模式的實現示例

    這篇文章主要介紹了Android 畫中畫模式的實現示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-12-12
  • Android 安全退出應用程序的方法總結

    Android 安全退出應用程序的方法總結

    這篇文章主要介紹了Android 安全退出應用程序的方法總結的相關資料,需要的朋友可以參考下
    2017-03-03
  • Android 活動條ActionBar的詳解及實例代碼

    Android 活動條ActionBar的詳解及實例代碼

    這篇文章主要介紹了Android 活動條ActionBar的詳解及實例代碼的相關資料,需要的朋友可以參考下
    2016-12-12
  • Android實現調用系統(tǒng)相冊和拍照的Demo示例

    Android實現調用系統(tǒng)相冊和拍照的Demo示例

    這篇文章主要介紹了Android實現調用系統(tǒng)相冊和拍照的Demo示例,實例分析了Android調用系統(tǒng)相冊及拍照的技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-10-10
  • Android實現帶列表的地圖POI周邊搜索功能

    Android實現帶列表的地圖POI周邊搜索功能

    這篇文章主要為大家詳細介紹了Android實現帶列表的地圖POI周邊搜索功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-05-05
  • Android中實現詞組高亮TextView方法示例

    Android中實現詞組高亮TextView方法示例

    高亮顯示大家應該都不陌生,在開發(fā)中經常會遇到這個需求,所以下面這篇文章主要給大家介紹了關于Android中實現詞組高亮TextView的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-10-10
  • Android關鍵字persistent詳細分析

    Android關鍵字persistent詳細分析

    這篇文章主要介紹了Android關鍵字persistent的相關資料,幫助大家更好的理解和學習使用Android,感興趣的朋友可以了解下
    2021-04-04

最新評論

韶关市| 孟津县| 怀远县| 和静县| 交口县| 黄石市| 徐闻县| 弥渡县| 民勤县| 奎屯市| 武强县| 沙田区| 道真| 彭山县| 察雅县| 庄浪县| 岳阳县| 武城县| 阳城县| 吉隆县| 云南省| 于都县| 太仆寺旗| 夏邑县| 青田县| 佛教| 丽江市| 抚远县| 钟山县| 博客| 万荣县| 安岳县| 化隆| 新余市| 贵定县| 吉林省| 瑞丽市| 湟中县| 莫力| 滨海县| 山阳县|