发布时间:2024-01-18 10:08:32 浏览量:181次
Android在启动应用程序的时候,会为应用创建一个Main线程,这个线程负责将事件分派给相应用户接口的widget,其中包括drawing事件。除了事件分派之外,Main线程还负责应用与Android UI组件(例如, android.widget 和android.view 包)进行交互,因此Main 线程有时候也被称为UI线程。
Application Not Response简称ANR,程序无响应。
Android不会为每个组件实例创建单独的线程。运行于同一进程的所有组件均在 UI 线程(Main)中实例化,并且对每个组件的系统调用均由该线程进行分派。这样一来,响应系统回调的方法(例如生命周期回调方法)始终在进程的UI线程中运行。
如果应用在响应用户的操作的时候,在UI线程中执行了大量的耗时操作,比方说网络访问或数据库查询。这样做的后果势必会阻塞整个UI。一旦UI线程被阻塞,将无法分派任何事件,包括绘图事件。
如果UI线程被阻塞超过一定时间(目前 5 秒钟),就会出现我们常说的ANR。
既然ANR是由于在UI线程中执行大量耗时的操作引起的,那么我们在主线程中新建一个worker线程问题不就解决了么?事实上,这种方式的确能够解决一些问题,但是对于UI来说就不是那么灵光了,因为Android UI 线程并不是线程安全的。
当程序中存在多个线程,如果多个线程都要访问相同的公共的数据或者资源,就会产生线程安全为题。如果不解决线程安全问题,公共数据或者资源就会变得紊乱,影响正常的业务逻辑开发。
要解决多线程访问共享资源的安全问题,可以通过加锁机制进行解决。常见的加锁机制有:互斥锁,读写锁等方式。加锁后解决了线程安全问题,但是因为涉及到上锁,释放锁的操作,消耗资源,因此加锁会降低程序的运行效率。
综上,当遇到多线程执行时:不加锁,会存在线程安全问题;加了所,解决线程安全问题,影响效率。
因为线程安全性能较差,线程不安全性能较好,Android中为了提高UI的绘制效率,保证渲染效果,选择了线程不安全。因为线程不安全带来的问题就是“不安全”,所以Android设计主线程为单线程模型,只能在UI线程中操作UI界面。
在Android开发过程中需要注意两点:
如果子线程需要来修改用户界面,就必须先通知主线程,主线程来帮助完成 。
针对不能再线程中更新UI的问题,Android提供了三种在线程中更新UI的方式来解决这一问题:
转自:知乎Davie
热门资讯
想要了解iPhone6界面设计的尺寸规范吗?这里为您详细介绍iPhone6的UI设计尺寸规范,包括界面尺寸、图标尺寸、可点击高度规范、搜索栏高度规范以及界面元素之间的距离规范。
将为大家介绍12个绝佳的UI设计网站,这些网站不仅可以为你提供灵感,还可以帮助你学习新的技巧,助力你的创意之旅!dribbbleDribbble 是一个面向设计师的...
3. 移动端UI设计中常见的5种APP界面类型,你get到了吗?
通过介绍移动端UI设计中的闪屏页、引导页、浮层引导页、空白页和首页等5种APP界面类型,帮助大家更好地了解UI设计的基本知识
怎样可以提升你的UI设计能力!第一个:站酷站酷想必是设计师都知道的一个网站,里面不止有UI设计的资源,还有其他设计的,不如:平面设计、网页设计、字体...
在移动端设计中,列表页和表单页是不可或缺的部分。一个好的列表页和表单页设计能够让用户轻松地获取信息并产生点击欲望,从而提高点击率。本文将为你...
对于想要提高自己的设计能力和创造力的小白和UI设计师来说,这本书是一个很好的选择。4.《设计的觉醒》(IKKO TANAKA)推荐理由: 这本书是日本现代平面...
探索零基础UI设计培训的时长与薪资前景。了解数字艺术教育领域的专业课程,以及培训后的职业发展机会。
ui设计应该让用户一目了然,能够快速找到所需的信息和功能。在设计过程中,应尽量使用简洁的图标、文字和色彩,避免过多的视觉干扰。符合用户习惯:ui设...
9. 设计中的色彩心理学:浅析中西方色彩的历史演变与设计应用
摘要:本文探讨了色彩的历史演变和设计应用。通过对色彩在早期文明社会中的实用运用、不同文化背景下色彩观念的差异、色彩在设计中的重要性以及新兴技...
10. 武汉UI设计培训班费用怎么样?想学UI设计要多少钱?
想了解武汉UI设计培训班的费用是多少吗?不知道学UI设计要花多少钱?不妨看看这篇文章,了解UI设计培训班的学费价格以及学习内容。
同学您好!