`
dengbaoleng
  • 浏览: 1162495 次
文章分类
社区版块
存档分类
最新评论

invalidate()和postInvalidate()

 
阅读更多
invalidate()是用来刷新View的,必须是在UI线程中进行工作。比如在修改某个view的显示时,调用invalidate()才能看到重新绘制的界面。invalidate()的调用是把之前的旧的view从主UI线程队列中pop掉。 一个Android 程序默认情况下也只有一个进程,但一个进程下却可以有许多个线程。在这么多线程当中,把主要是负责控制UI界面的显示、更新和控件交互的线程称为UI线程,由于onCreate()方法是由UI线程执行的,所以也可以把UI线程理解为主线程。其余的线程可以理解为工作者线程。

invalidate()得在UI线程中被调动,在工作者线程中可以通过Handler来通知UI线程进行界面更新。而postInvalidate()在工作者线程中被调用:

一、调Handler.post(Runnable r)方法,Runnable运行在UI所在线程,所以可以直接调用View.invalidate()

二、在新线程里更新UI,可以直接postInvalidate().




分享到:
评论

相关推荐

    android中Invalidate和postInvalidate的更新view区别

    `Invalidate`和`postInvalidate`是Android提供的两种主要的View刷新机制,它们虽然都能达到更新界面的效果,但在使用场景和执行机制上有所区别。 首先,`Invalidate`方法是直接在UI线程中调用的。当调用一个View的`...

    浅谈Android invalidate 分析

    1. invalidate 和 postInvalidate 的关系 postInvalidate 是通过 Handler 切换回到主线程,然后在调用 invalidate 的,源码: public void postInvalidate() { postInvalidateDelayed(0); } public void ...

    Android中invalidate()和postInvalidate() 的区别及使用方法

    在Android开发中,更新视图(View)是常见的任务,主要通过`invalidate()`和`postInvalidate()`这两个方法来实现。这两个方法都是用来触发View的重绘,但它们的使用场景和机制有所不同。 首先,`invalidate()`方法...

    Android自定义带圆点的半圆形进度条

    本例展示了如何使用Android中的自定义View来实现带圆点的半圆形进度条,并且详细介绍了自定义View的基本结构、进度条的绘制、圆点的绘制、进度条的更新、Invalidate和postInvalidate的区别、自定义属性的使用和...

    分析invalidate流程例子

    在Android开发中,`Invalidate`是一个至关重要的概念,它涉及到UI更新机制,与用户界面的刷新和重绘紧密相关。当我们对一个View调用`invalidate()`方法时,实际上是触发了该View的重新绘制过程。这个过程涉及到多个...

    Android中View绘制流程以及invalidate()

    `invalidate()`的内部实现会调用`postInvalidate()`,如果当前View不在UI线程,`postInvalidate()`会将其加入到消息队列中,等待主线程处理。而在主线程中,`invalidate()`会直接触发`draw()`方法,从而启动绘制流程...

    Android中View绘制流程以及invalidate()等相关方法分析

    在Android开发中,View是构建用户界面的基本元素,它的绘制流程和`invalidate()`等相关方法是开发者需要深入理解的关键概念。本文将详细解析Android中View的绘制流程,以及`invalidate()`等核心方法的工作原理。 ...

    Android-LinearLayout-Parser:为所有孩子和子孩子解析一个 Android LinearLayout 对象

    但是在根布局上调用 invalidate 或 postInvalidate 不会自动强制子级重新绘制自己。 因此,每个孩子都需要调用 postInvalidate。 ModDataLLParser 可以从活动的 OnCreate 方法实例化。 它应该在视图初始化之后完成...

    最新_互联网公司招聘_笔试_开发_百度Android工程师面试题.pdf

    View 的刷新使用 handle.sendMessage 发送信息,然后在 handle 的 getMessage 里面执行 invalidate 或者 postInvalidate。GC 内存泄露的出现情况包括数据库的 cursor 没有关闭、构造 adapter 时没有使用缓存 ...

    Android 实现界面刷新的几种方法

    需要注意的是,`postInvalidate()`和`Invalidate()`的区别在于,`postInvalidate()`是在UI线程的消息队列中添加一个请求,而`Invalidate()`会立即触发重绘,如果当前正处于UI线程,则会立即执行。 总结来说,...

    美图2017秋招客户端工程师笔试试卷.pdf

    - `requestLayout()`、`invalidate()`、`postInvalidate()`:这些方法都与视图的重新布局和绘制有关,`requestLayout()`要求当前视图及其所有父视图重新布局,`invalidate()`立即标记视图为脏并触发重绘,而`...

    Android中刷新界面的二种方法

    本文将详细介绍两种在Android中在线程中刷新界面的方法:Handler和postInvalidate()。 1. 利用Handler刷新界面 Handler是Android中用于线程间通信的重要工具,它允许你在后台线程发送消息到主线程,并在主线程中...

    百度android开发面试题

    - **View的刷新**:通过Handler发送消息,在消息处理中调用invalidate或postInvalidate触发视图更新。 - **GC内存泄露**:常见原因包括未关闭的数据库Cursor、不合理的Adapter构造、未释放的Bitmap对象和过度存活的...

    Android面试专题课程 -修改1

    14. **invalidate()和postInvalidate()**:两者都用于触发View的重新绘制,但invalidate()直接在UI线程中调用,postInvalidate()在下一帧时异步调用,适合非UI线程触发刷新。 15. **动画框架实现原理**:Android的...

    10编写推箱子游戏程序(第五步)

    这两个方法都是用来刷新视图的,`postInvalidate()`会在UI线程的下一个循环中执行,而`invalidate()`会立即执行,但考虑到性能优化,通常推荐使用`postInvalidate()`。 为了防止搬运工走出游戏区域,我们需要在处理...

    android自定义控件之声音大小显示

    - **invalidate()与postInvalidate()**:当麦克风数据变化时,我们需要更新视图以反映新的声音曲线。可以调用`invalidate()`或`postInvalidate()`来触发`onDraw()`的调用,重新绘制控件。 5. **性能优化** - **...

Global site tag (gtag.js) - Google Analytics