首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

droid invalidate和postinvalidate的区别

Android提供了Invalidate方法实现界面刷新,但是Invalidate不能直接在线程中调用,因为他是违背了单线程模型:Android UI操作并不是线程安全的,并且这些操作必须在UI线程中调用...invalidate()是用来刷新View的,必须是在UI线程中进行工作。比如在修改某个view的显示时,调用invalidate()才能看到重新绘制的界面。...invalidate()的调用是把之前的旧的view从主UI线程队列中pop掉。 一个Android 程序默认情况下也只有一个进程,但一个进程下却可以有许多个线程。...invalidate()得在UI线程中被调动,在工作者线程中可以通过Handler来通知UI线程进行界面更新。...而postInvalidate()在工作者线程中被调用 利用invalidate()刷新界面   实例化一个Handler对象,并重写handleMessage方法调用invalidate()实现界面刷新

43350

Android View 深度分析requestLayout、invalidate与postInvalidate「建议收藏」

首先,一个子View调用该方法,那么我们直接看View#invalidate方法: public void invalidate() { invalidate(true); } void...好了,现在总结一下invalidate方法,当子View调用了invalidate方法后,会为该View添加一个标记位,同时不断向父容器请求刷新,父容器通过计算得出自身需要重绘的区域,直到传递到ViewRootImpl...#postInvalidate 这个方法与invalidate方法的作用是一样的,都是使View树重绘,但两者的使用条件不同,postInvalidate是在非UI线程中调用,invalidate则是在...} } 可以看出,参数message传递过来的正是View视图的实例,然后直接调用了invalidate方法,然后继续invalidate流程。...而invalidate则是刷新当前View,使当前View进行重绘,不会进行测量、布局流程,因此如果View只需要重绘而不需要测量,布局的时候,使用invalidate方法往往比requestLayout

1K11

0810-5.15.1-Impala执行invalidate metadata异常分析

所有的invalidate metadata命令都堵在这个线程上。如果同时运行多个invalidate metadata则后面的invalidate metadata所需等待时间会更长。...8.结合此环境和以往catalogd日志看,8月7日执行的“invalidate metadata”一共用了38分钟[1],6月28日的时候一次“invalidate metadata”还只需要1分钟左右的时间...等到invalidate metadata发起这个请求的时候前面已经有很多排队的请求所以会等待很长的时间。...这也是为什么从日志里看到刚启动catalogd的时候invalidate metadata很快,越往后面等待的时间就越长。...等到invalidate metadata发起这个请求的时候前面已经有很多排队的请求,所以会等待很长的时间。

2.3K50

常见面试第四题之requestLayout, invalidate和postInvalidate的异同

requestLayout, invalidate和postInvalidate的异同 今天我们来讲讲在面试当中最常见的,最常常被问到的第四题,近期由于小编工作比较忙碌,更新的比较缓慢还请大家见谅。...其实就缺少不了我们题目所说的那个问题,就是requestLayout, invalidate和postInvalidate的异同。...其实android中实现view的更新有两种方法,一种是invalidate,另一种是postInvalidate,其中前者是在UI线程自身中使用,而后者在非UI线程中使用。 怎么说呢?...Android提供了Invalidate方法实现界面刷新,但是Invalidate不能直接在线程中调用,因为他是违背了单线程模型:Android UI操作并不是线程安全的,并且这些操作必须在UI线程中调用...鉴于此,如果要使用invalidate的刷新,那我们就得配合handler的使用,使异步非ui线程转到ui线程中调用,如果要在非ui线程中直接使用就调用postInvalidate方法即可,这样就省去使用

1.2K50

2014-10-27Android学习------程序源码+知识总结------城市列表应用程序

();这样一个函数: 1).invalidate()是用来刷新View的,必须是在UI线程中进行工作。...比如在修改某个view的显示时,调用invalidate()才能看到重新绘制的界面。invalidate()的调用是把之前的旧的view从主UI线程队列中pop掉。...2).调用invalidate()的几种情况: 一般引起invalidate()操作的函数如下: 1、直接调用invalidate()方法,请求重新draw(),但只会绘制调用者本身...3).android中Invalidate和postInvalidate的区别 Android中实现view的更新有两组方法,一组是invalidate,另一组是postInvalidate,其中前者是在...Android提供了Invalidate方法实现界面刷新,但是Invalidate不能直接在线程中调用,因为他是违背了单线程模型:Android UI操作并不是线程安全的,并且这些操作必须在UI线程中调用

28530

hive表修复元数据

文章目录 hive 分区表msck命令 Impala中的invalidate metadata和refresh 使用方式 INVALIDATE METADATA原理 REFRESH原理 使用原则 总结...INVALIDATE METADATA 语法: INVALIDATE METADATA; //重新加载所有库中的所有表 INVALIDATE METADATA [table...METADATA原理 对于INVALIDATE METADATA操作,由客户端将查询提交到某个impalad节点上,执行如下的操作: 获取需要执行INVALIDATE METADATA的表,如果没指定表则不设置表示全部表...INVALIDATE METADATA执行完成 INVALIDATE METADATA操作带来的副作用是生成一个新的未完成的元数据对象,对于操作请求的impalad(称它为impalad-A),能够立马获取到该对象...总结 REFRESH和INVALIDATE METADATA对于impala而言是比较重要的两个操作,分别处理数据和元数据的修改,其中REFRESH操作是同步的,INVALIDATE METADATA是异步的

2K10

MESI 与 StoreBuffer 相互独立的猜想

总是得有一个CPU先将 StoreBuffer 中的修改写入到缓存的,假设是 CPU1,那么他在写入时需要向总线发送 Invalidate 请求 CPU2 和 CPU3 收到 Invalidate 之后...并且发回 Invalidate ACK CPU 在收到所有 其他CPU 的 Invalidate ACK 响应之后,将缓存行状态设置为 Exclusive ?...当 CPU3 把自己的 ++A 修改写入缓存行时,他检查到自己A对应的缓存行是 Invalidated 状态,这个状态和未持有这个缓存行是等效的 所以他需要在总线上广播 Read - Invalidate...同时返回一个 Invalidate ACK。 ? ? CPU3 收集到所有CPU的 Invalidate ACK 之后,将缓存行状态修改为 Exclusive ?...所以从 Invalidate ACK 收集满到 写入修改的 过程是原子的。 ?

53910
领券