亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

子線程為啥不能更新UI?

標簽:
Android

Android消息机制字典型探究(一)

子线程为啥不能更新UI?

开心一刻
写在前面:
看到Android消息机制这几个字眼,相信大家脑海中第一时间就浮现出了Handler这个单词,关于这个知识点,几乎是面试必问的问题,重要程度不言而喻。我曾花了大致一周多的时间去研究它,本打算将其有关的所有知识点完完全全地写出,但发现篇幅会过于冗长而影响阅读。所以准备拆分成几个知识点模块,循序善诱,一步步带领大家弄清楚Android的消息机制

既然没有了篇幅限制,自然可以全面的去讲一讲有关Handler的一切,我先来说说当时是怎么接触到Handler这个类的。

在我自学Android过程中,写了一个访问网络请求图片并显示的Demo,在子线程中我直接给ImageView设置了图片,造成了崩溃。崩溃信息如下:

崩溃信息

Only the original thread that created a view hierarchy can touch its views.

这个错误信息在字面上翻译过来就是:只有创建视图层级的原始线程,有权利处理它的视图。说白了,就是我们经常说的“子线程不能更新UI”。这句话体现了主线程在处理视图上具有唯一权力,这也就是为什么主线程也可以称为UI线程

在解决这个崩溃问题之前,我对Android中子线程不能更新UI产生了非常大的好奇心。

Google如此设计的原因是什么呢?

  1. 表象
    我们先从表象上分析一下,假设可以在子线程更新UI,会产生那些后果呢?
    如果不同的线程控制同一块UI,因为时间的延时性,网络的延迟性,很有可能界面图像会乱套,会花掉。而且出了问题也非常不容易排查问题出在了哪里。从硬件上考虑,每个手机只有一个显示芯片,根本上不可能同时处理多个绘制请求),减少更新线程数,其实是提高了更新效率。

  2. 本质
    如果可以并发的更新UI,事实上是 “is not thread safe”的,也就是线程不安全。我们都知道,线程安全问题其实就是,不同的线程对同一块资源的调用。在更新UI的同时,会涉及context资源的调用,所以产生了线程安全问题。

原文链接:http://www.apkbus.com/blog-705730-62548.html

點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消