国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android編程中關于單線程模型的理解與分析

2020-04-11 11:19:54
字體:
來源:轉載
供稿:網友

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

當一個Android程序啟動時,Android系統會同時啟動一個對應的主線程(Main Thread)。

由于這個主線程(Main Thread)主要的任務就是對UI相關的事件進行處理(例如顯示文本,處理點擊事件,顯示圖片等),系統對每一個組件的調用都是從主線程中分發出去的,所以又常被稱為UI線程。

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

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

當然,這并非鼓勵我們將一切操作都放在UI線程當中進行。

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

Ps:據我所知,Android SDK在4.0版本之后就不支持在Main Thread中直接進行網絡相關操作,除非你厚顏無恥地在主線程中加上如下代碼:

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

因此,Android單線程模型的原則總結起來大致有兩點:

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

2.不要用費時的操作阻塞UI線程

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

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 景东| 枞阳县| 昌黎县| 繁峙县| 昌吉市| 光山县| 建瓯市| 类乌齐县| 贡觉县| 苗栗县| 隆昌县| 新泰市| 四子王旗| 永泰县| 阿拉善右旗| 巍山| 南丰县| 广灵县| 崇阳县| 灵寿县| 汝城县| 和田市| 南陵县| 宜宾县| 洱源县| 黄龙县| 裕民县| 伊通| 科尔| 宣武区| 沽源县| 奈曼旗| 靖西县| 长治市| 夏邑县| 曲周县| 南投市| 元阳县| 阳西县| 中阳县| 东乡|