欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android編程中關(guān)于單線程模型的理解與分析

 更新時(shí)間:2015年10月31日 12:03:34   作者:Vector_Yi  
這篇文章主要介紹了Android編程中關(guān)于單線程模型的理解與分析,較為詳細(xì)的分析了Android編程中關(guān)于單線程的原理與相關(guān)使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下

本文講述了Android編程中關(guān)于單線程模型的理解與分析。分享給大家供大家參考,具體如下:

當(dāng)一個(gè)Android程序啟動時(shí),Android系統(tǒng)會同時(shí)啟動一個(gè)對應(yīng)的主線程(Main Thread)。

由于這個(gè)主線程(Main Thread)主要的任務(wù)就是對UI相關(guān)的事件進(jìn)行處理(例如顯示文本,處理點(diǎn)擊事件,顯示圖片等),系統(tǒng)對每一個(gè)組件的調(diào)用都是從主線程中分發(fā)出去的,所以又常被稱為UI線程。

IMP,Android單線程模型的核心原則就是:只能在UI線程(Main Thread)中對UI進(jìn)行處理。
為了提高Performance,Android對UI處理的相關(guān)method都不是synchronized,所以當(dāng)你試圖用其他線程來對UI進(jìn)行操作時(shí),會拋出如下異常:

android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.

當(dāng)然,這并非鼓勵(lì)我們將一切操作都放在UI線程當(dāng)中進(jìn)行。

有些十分費(fèi)時(shí)但對UI更新影響很小的操作(如網(wǎng)絡(luò)操作,數(shù)據(jù)庫操作等),若一起放在UI線程當(dāng)中去進(jìn)行的話,會導(dǎo)致UI Performance十分poor,對的,非常非常poor,甚至彈出ANR(Application Not Responding)窗口,這無疑對用戶是十分不友好的。

Ps:據(jù)我所知,Android SDK在4.0版本之后就不支持在Main Thread中直接進(jìn)行網(wǎng)絡(luò)相關(guān)操作,除非你厚顏無恥地在主線程中加上如下代碼:

StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder() 
  .detectDiskReads().detectDiskWrites().detectNetwork() 
  .penaltyLog().build()); 
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder() 
  .detectLeakedSqlLiteObjects().penaltyLog().penaltyDeath() 
  .build());

因此,Android單線程模型的原則總結(jié)起來大致有兩點(diǎn):

1.只能在UI線程(Main Thread)中對UI進(jìn)行處理,不要在UI線程之外訪問Android UI toolkit

2.不要用費(fèi)時(shí)的操作阻塞UI線程

關(guān)于如何處理好Android程序中的多線程,可以參考Android官方training

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

您可能感興趣的文章:

相關(guān)文章

最新評論