Android UI界面刷新与交互

本文探讨Android UI界面更新,讲解UI线程、ANR问题及其原因,介绍如何在子线程中安全访问UI资源,以及Android系统提供的线程不安全方案。同时强调了UI界面刷新的注意事项和避免阻塞主线程的重要性。
摘要由CSDN通过智能技术生成

一、数据请求与UI界面更新事项

1.1 UI线程

Android在启动应用程序的时候,会为应用创建一个Main线程,这个线程负责将事件分派给相应用户接口的widget,其中包括drawing事件。除了事件分派之外,Main线程还负责应用与Android UI组件(例如, android.widget 和android.view 包)进行交互,因此Main 线程有时候也被称为UI线程。

1.2 ANR

Application Not Response简称ANR,程序无响应。

Android不会为每个组件实例创建单独的线程。运行于同一进程的所有组件均在 UI 线程(Main)中实例化,并且对每个组件的系统调用均由该线程进行分派。这样一来,响应系统回调的方法(例如生命周期回调方法)始终在进程的UI线程中运行。

如果应用在响应用户的操作的时候,在UI线程中执行了大量的耗时操作,比方说网络访问或数据库查询。这样做的后果势必会阻塞整个UI。一旦UI线程被阻塞,将无法分派任何事件,包括绘图事件。

如果UI线程被阻塞超过一定时间(目前 5 秒钟),就会出现我们常说的ANR。

1.3 如何在子线程中访问UI资源

既然ANR是由于在UI线程中执行大量耗时的操作引起的,那么我们在主线程中新建一个worker线程问题不就解决了么?事实上,这种方式的确能够解决一些问题,但是对于UI来说就不是那么灵光了,因为Android UI 线程并不是线程安全的。

1.3.1 线程安全问题

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值