首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android 8中的哪些变化使得从非UI线程更新ui成为可能

Android 8中的一些变化使得从非UI线程更新UI成为可能。这些变化包括:

  1. 引入了新的API:Android 8引入了一些新的API,如View.postOnAnimation()和View.postDelayed(),它们允许开发者在非UI线程上安排UI更新操作。这些API可以将UI更新操作放入UI线程的消息队列中,以便在合适的时机执行。
  2. 后台执行限制:Android 8引入了后台执行限制,即应用在后台运行时,系统会限制其对CPU和网络资源的访问。然而,开发者可以使用JobScheduler API来安排在合适的时机执行UI更新操作,以避免后台执行限制。
  3. 后台服务限制:Android 8对后台服务的限制更加严格,这意味着应用无法在后台无限制地执行任务。开发者可以使用JobScheduler API来安排在合适的时机执行UI更新操作,以避免后台服务限制。
  4. 异步任务框架改进:Android 8对异步任务框架进行了改进,使得开发者可以更方便地在非UI线程上执行任务并更新UI。例如,AsyncTask类的executeOnExecutor()方法可以指定任务在线程池中执行,从而避免在非UI线程上直接更新UI。

总结起来,Android 8中的变化使得开发者可以更加灵活地在非UI线程上更新UI。开发者可以使用新的API、JobScheduler API和改进后的异步任务框架来实现这一目标。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Android线程更新UI问题深入讲解

前言 在Android项目中经常有碰到这样问题,在子线程中完成耗时操作之后要更新UI,下面就自己经历一些项目总结一下更新方法。...UI吗,为什么情形一可以正常运行,情形二不能正常运行呢; 子线程修改UI出现异常,与什么方法有关 首先从出现异常log日志入手,发现出现异常方法调用顺序如下: TextView.setText...,是否是创建ViewRootImp线程,而创建ViewRootImp线程就是主线程,当前线程不是主线程时候,就抛出异常。...总结一下: 1.Android更新UI会调用ViewrequestLayout()方法,在requestLayout方法中,获取ViewParent,然后调用ViewParentrequestLayout...= Thread.currentThread()判断为true,所以不会抛出只能在主线程更新UI异常。

1.1K30

为什么我线程更新UI 没报错?借此,纠正一些Android 程序员一个知识误区

开门见山: 这个误区是:子线程不能更新 UI ,其应该分类讨论,而不是绝对。...半小时前,我 XRecyclerView 群里面,一位群友私聊我,问题是: 为什么我线程更新UI 没报错? 我叫他发下代码我看,如下,十分简单代码。...那么这样来说,按照我们被一直灌输原理: 子线程不能刷新UI,上面这段代码妥妥地爆错啊。 而我要说是: 上面的代码不一定爆错,它还会稳稳顺利执行。 你十分怀疑了? 你可以尝试下。...嫌麻烦,你可以运行下下面这段通透线程更新UI代码 public class TestActivity extends Activity { private TextView title;...子线程不能更新 UI 限制是 viewRootImpl.java 内部限制了 void checkThread() { // 该方法是 viewRootImpl.java 内部代码 if (mThread

1.2K70

Android异步消息处理机制完全解析-Handler详解

-Android面试常客Handler详解 如果在UI线程更新UI会出现问题吗?...UI线程更新UI出现 为了更直观看到报错原因,我们找到源码ViewRootImplcheckThread方法,看它做了些什么。 ?...而我们一般View都是为了显式在UIAndroid正是为了防止我们在UI线程去操作这些UI控件,才加了限制。...因为UI体验对用户来说是最直观,如果谁都有权限去操作一下,那UI要么很乱,要么控制很复杂。 竟然Android是不允许我们在UI线程中去执行更新UI,那我们要怎么解决这个问题呢?...详细解答: 为什么我们可以在UI线程更新UI 八、Handler异步消息处理(HandlerThread) Android HandlerThread 完全解析 Android异步消息处理机制完全解析

84730

你真的了解ViewModel设计思想吗?

引言 在Android开发中,数据管理是一个至关重要问题。随着应用复杂度增加,我们需要一种能够有效管理数据和处理UI相关逻辑机制。Android架构组件中ViewModel应运而生。...在Android中,ViewModel通常用于存储和管理与UI相关数据,以确保这些数据在屏幕旋转或配置更改等情况下不会丢失。 原理解析 ViewModel原理是基于ViewModelStore类。...当UI控制器销毁时,系统会其对应ViewModelStore实例中移除ViewModel。...这在某些情况下非常有用,比如一个Activity和它多个Fragment需要访问和更新相同数据。...这使得在ViewModel中执行耗时操作成为可能,而不会阻塞UI线程

16710

Android Studio 4.0 正式版发布

另外,我们还根据大家反馈调整了 CPU Profiler 界面,使得工作流更加直观,而且还提供了并排显示功能帮助您更轻松地分析线程活动。...,使得 Android 开发者能在应用中管理复杂动效和 widget 动画。...如果您应用是部署到 API 等级 29 或以上设备,则可以使用到更丰富功能,比如随着视图变化动态更新布局层次结构、帮助您更好了解资源取值解析详细视图属性信息、以及可以展示运行时 UI 结构实时...在 Android Studio 4.0 中,CPU 活动记录分析器主时间轴中分离出来,并成组展现,以便于分析。...全新升级: 更加直观实时调试体验 Layout Validation: 在多个屏幕上同时对比 UI 开发与分析: CPU Profiler 更新: UI 更直观、更易于浏览,数据更易解读 R8 规则更新

3.4K31

如何构建Android MVVM应用程序

这种模式中,程序主角是UI,通过UI事件触发对数据进行处理,更新UI就有考虑线程问题。...数据驱动 在MVVM中,以前开发模式中必须先处理业务数据,然后根据数据变化,去获取UI引用然后更新UI,通过也是通过UI来获取用户输入,而在MVVM中,数据和业务逻辑处于一个独立View Model...由数据自动去驱动UI去自动更新UIUI改变又同时自动反馈到数据,数据成为主导因素,这样使得在业务逻辑处理只要关心数据,方便而且简单很多。...(TextView 换成 EditText)ViewModel 几乎不需要更改任何代码,专注自己数据处理就可以了,如果是MVP遇到UI更改,就可能需要改变获取UI方式,改变更新UI接口,改变UI...更新 UI 在MVVM中,我们可以在工作线程中直接修改View Model数据(只要数据是线程安全),剩下数据绑定框架帮你搞定,很多事情都不需要你去关心。

1.2K10

Android性能优化典范之多线程

Android UI 对象创建,更新,销毁等等操作都默认是执行在主线程,但是如果我们在线程UI对象进行操作,程序将可能出现异常甚至是崩溃。...另外,在 UI 线程中直接持有 UI 对象引用也很可能出现问题。...UI 对象更新操作也都没有任何意义了,因为它已经 ViewHierarchy 中被移除,不再绘制到画面上了。...系统为了确保所有的 UI 对象都只会被 UI 线程所进行创建,更新,销毁操作,特地设计了对应工作机制(当 Activity 被销毁时候,由该 Activity 所触发 UI 线程都将无法对UI...Profile GPU Rendering : M Update Android M 系统开始,系统更新了 GPU Profiling 工具来帮助我们定位 UI 渲染性能问题。

1K11

Android界面性能优化必读

1.5 UI 线程 UI 线程是应用线程,很多性能和卡顿问题是由于我们在主线程中做了大量工作。...2.2.7 StrictMode 通过在 Android 设备设置 APP 开发者选项里启动 “ 严格模式 ” ,来查看应用哪些操作在主线程上执行时间过长。...使用这个工具可以让你查看在动画期间哪些不期望更新布局有更新,方便你进行优化,以获得应用更好性能。...甚至让负责产品设计的人去改善他设计,以获得良好用户体验。 检测渲染性能时,常伴随着开启“ 严格模式 ” 查看应用哪些情景在 UI 线程(主线程)上执行时间过长。...当该视图有类似位置被移动等变化而需要重新渲染这个视图时候,则只需 GPU 额外执行一次渲染指令冰更新到屏幕上就够了。

4.6K10

Android进程与线程使用总结

当这些组件有新任务到达时,他们对应进程又会被启动。 在决定哪些进程需要被kill时候,Android系统会权衡这些进程跟用户相关重要性。...这有两条简单关于Android线程模型规则: 不要阻塞 UI 线程 不要在UI线程里访问 Android UI toolkit Worker 线程 由于上面对单一线程模型描述,保证应用界面的及时响应同时...然而,它违反来单一线程模型第二条规则: 不在UI线程里访问 Android UI toolkit—这个例子在一个worker线程修改了 ImageView 。...这会导致不可预期结果,而且还难以调试。 为了修复这个问题,Android提供了几个方法UI线程访问Android UI toolkit 。...如果你需要更新UI,那么你应该实现onPostExecute(),这个方法 doInBackground() 取出结果,然后在 UI 线程里面运行,所以你可以安全更新UI

98670

Android线程:你必须要了解线程基础知识汇总

线程UI线程) 定义:Android系统在程序启动时会自动启动一条主线程 作用:处理四大组件与用户进行交互事情(如UI、界面交互相关) 注:因为用户随时会与界面发生交互,因此主线程任何时候都必须保持很高响应速度...子线程(工作线程) 定义:手动创建线程 作用:耗时操作(网络请求、I/O操作等) 2.3 守护线程守护线程区别 区别:虚拟机是否已退出: 当所有用户线程结束时,因为没有守护必要,所以守护线程也会终止...4.2 作用 Android官方声明:在多线程编程时有两大原则: 不要阻塞UI线程(即主线程):单线程会导致主线程阻塞,然后出现ANR错误:主线程被阻塞超过5s则会出现错误 不要在UI线程之外更新UI...UI线程了,必须要抛到工作线程中去执行; 将更新UI组件放在主线程中进行 对应原则:不要在UI线程之外访问UI组件,即更新UI组件时,一定得在UI线程里执行,故需要在工作线程中执行任务结果返回到...UI线程中去更新组件 4.3 应用场景 将耗时任务线程抛到工作线程中进行 将更新UI组件任务工作线程抛到主线程中进行 4.4 实现方式 Android线程实现方式包括: ?

1.1K40

Flutter 渲染性能问题分析

,了解各个环节可能耗时和哪些环节可能成为性能瓶颈。...但是在惯性滚动这样对性能要求非常高场景下,可能几毫秒阻塞都会导致掉帧,缺少真正线程编程能力某种程度就变成了一种阻碍(Android 上你甚至可以在其它线程对 View 做 UI 直接相关操作)...Android 无限长列表一般使用 RecyclerView 实现,而 RecyclerView 支持子 View 树级别的复用,使得新挂载列表单元在 RecyclerView 支持下,只需要更新复用子...如果它们集中频繁地发生,即使单次耗时不高,也很容易造成 Flutter UI 线程阻塞,简单说就是这些 UI 任务频繁执行可能会导致惯性滚动过程中 UI 任务延迟,最终导致掉帧,但是 Dart...Isolate 限制,对内部数据更新又必须在 UI 线程上进行。

2.5K20

Android面试帮助篇】被面试官怼了? 这里有20道面试真题,助力成为offer收割机!

7、谈谈你对Android中Context理解? 8、ServiceonCreate回调在UI线程中吗? 9、请介绍下AsyncTask内部实现,适用场景是?...14、Android线程实现方式有哪些? 15、Android开发中何时使用多进程?使用多进程好处是什么? 16、ANR是什么?怎样避免和解决ANR?...UI线程中吗?...特有,可以拦截事件. 7、Down事件到来时,如果一个View没有消费该事件,那么后续MOVE/UP事件都不会再给它 14、Android线程实现方式有哪些?...超时原因一般有两种: (1)当前事件没有机会得到处理(UI线程正在处理前一个事件没有及时完成或者looper被某种原因阻塞住) (2)当前事件正在处理,但没有及时完成 UI线程尽量只做跟UI相关工作

77120

EventBus简单入门总结

可继承、优先级、粘滞,是 EventBus 比之于广播、观察者等方式最大优点,它们使得创建结构良好组织紧密通知系统成为可能。 使用简单。...下面我们实现这一一个效果,A页面跳转到B页面,B页面发送通知更新A页面的textView字体颜色(颜色值 随机),效果图如下: 2.项目结构 3.activity_main.xml 放了一个按钮和一个显示文字...onEventMainThread:如果使用onEventMainThread作为订阅函数,那么不论事件是在哪个线程中发布出来,onEventMainThread都会在UI线程中执行,接收事件就会在UI...线程中运行,这个在Android中是非常有用,因为在Android中只能在UI线程中跟新UI,所以在onEvnetMainThread方法中是不能执行耗时操作。...onEventBackground:如果使用onEventBackgrond作为订阅函数,那么如果事件是在UI线程中发布出来,那么onEventBackground就会在子线程中运行,如果事件本来就是子线程中发布出来

65240

BAT Android常见面试题详解

比如你需要定位服务不停地把更新地理位置传给UI。Binder比Intent开发起来复杂一些,但如果真的需要,你也只能使用它。 startService:生命周期与调用者不同。...UI线程中吗?...特有,可以拦截事件. 7、Down事件到来时,如果一个View没有消费该事件,那么后续MOVE/UP事件都不会再给它 14、Android线程实现方式有哪些?...超时原因一般有两种: (1)当前事件没有机会得到处理(UI线程正在处理前一个事件没有及时完成或者looper被某种原因阻塞住) (2)当前事件正在处理,但没有及时完成 UI线程尽量只做跟UI相关工作...,耗时工作(数据库操作,I/O,连接网络或者其他可能阻碍UI线程操作)放入单独线程处理,尽量用Handler来处理UI thread和thread之间交互。

71220
领券