关闭

【Android】invalidate和postInvalidate的区别

标签: Android刷新界面invalidatepostInvalidate多线程
223人阅读 评论(0) 收藏 举报
分类:

    invalidate()是用来刷新View的,必须是在UI线程中进行工作。比如在修改某个view的显示时,调用invalidate()才能看到重新绘制的界面。invalidate()的调用是把之前的旧的view从主UI线程队列中pop掉。

    使用:

    实例化一个Handler对象,并重写handleMessage方法调用invalidate()实现界面刷新;而在线程中通过sendMessage发送界面更新消息。



    // 在onCreate()中开启线程

    new Thread(new GameThread()).start();、

    // 实例化一个handler

    Handler myHandler = new Handler() {
    // 接收到消息后处理
    public void handleMessage(Message msg) {
    switch (msg.what) {
    case Activity01.REFRESH:
    mGameView.invalidate(); // 刷新界面
    break;
    }

    super.handleMessage(msg);
    }
};

    class GameThread implements Runnable {
   public void run() {

 while (!Thread.currentThread().isInterrupted())

{

Message message = new Message();

message.what = Activity01.REFRESH; // 发送消息 
Activity01.this.myHandler.sendMessage(message); 
try { Thread.sleep(100); } 
catch (InterruptedException e) 
{ 
Thread.currentThread().interrupt(); }
 }
 }
}



    postInvalidate()在工作者线程中被调用。

0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

刷新界面:invalidate()和postInvalidate() 的区别及使用

Android提供了Invalidate方法实现界面刷新,但是Invalidate不能直接在线程中调用,因为他是违背了单线程模型:Android UI操作并不是线程安全的,并且这些操作必须在UI线程中调用。 invalidate()是用来刷新View的,必须是在UI线程中进行工作。比如在修...
  • dsa63
  • dsa63
  • 2014-09-17 09:51
  • 1527

View的两种更新方法-从源码角度分析invalidate()和postInvalidate()的区别

介绍最近在看各种Android多线程开发的各种知识,网上看到有关线程和View的东西,其中View的两种更新方法invalidate()和postInvalidate()。记得当时在深圳去面试其中有个题目就是说明这两个的区别。今天突然又看到就需要把不懂得总结出来。分析invalidate首先不管这两...
  • Card361401376
  • Card361401376
  • 2016-05-24 01:15
  • 1704

invalidate()方法不调用onDraw()方法的原因及解决办法

在网上看到很多人都在问自定义View中,使用invalidate()方法并不会不调用onDraw(),其实很容易忽略的一个原因是:你调用invalidate()的对象是哪个?你使用你要刷新的那个View对象调用的invalidate()吗?我曾经就遇到过这样一个低级的错误。 代码如下: //自定...
  • u011288271
  • u011288271
  • 2016-10-31 09:09
  • 2628

自定义控件invalidate()方法未成功调用onDraw()

写过自定义控件的大家都知道invalidate方法是Android请求重绘的方法。所以会调用到我们自己重写的onDraw方法。 但是在我最近写的一个控件时却没有调用他的onDraw方法。我所重写的控件需求是在触发事件后控件可以展开或是缩回 准确的说 是在我展开他的时候没有触发他的onDraw方法...
  • qq_28497681
  • qq_28497681
  • 2015-12-15 13:25
  • 2398

控件更新Invalidate和postInvalidate的区别

http://shazhuzhu1.iteye.com/blog/971193 android中实现view的更新有两组方法,一组是invalidate,另一组是postInvalidate,其中前者是在UI线程自身中使用,而后者在非UI线程中使用。     Andr...
  • gundumw100
  • gundumw100
  • 2017-04-10 18:24
  • 82

自定义View时遇到的invalidate 和 postInvalidate的区别

自定义View时,onDraw(Canvas canvas)方法中画出自己想要的图案 @Override protected void onDraw(Canvas canvas) { selectedPaint.setStyle(Style.STROKE); ...
  • MaoDunTi
  • MaoDunTi
  • 2015-04-02 11:20
  • 914

从源码角度理解postInvalidate和Invalidate

1 postInvalidate()方法在非UI线程中调用,通知UI线程重绘。 2 Invalidate()方法在UI线程中调用,重绘当前UI。 首先打开源码:postInvalidate()方法 源码解释如下: 在下一个事件循环中通知重绘,在非UI线程中使用它去重绘。 我们继续追踪下去,最后会...
  • u012516445
  • u012516445
  • 2017-07-28 09:34
  • 87

Android开发:Invalidate和postInvalidate刷新View的区别及应用-----ImageView绘制旋转圆环(二)

上文已经实现了圆环旋转,但是很多合格。发现之前对handler Thread Runnable理解的不深,包括如何刷新UI。这次总算清了一下帐,基本搞清除了。Android中实现view的更新有两组方法,一组是invalidate,另一组是postInvalidate,其中前者是在UI线程自身中使用...
  • yanzi1225627
  • yanzi1225627
  • 2013-02-16 00:32
  • 24057

Android自定义View(一)View绘制流程以及invalidate()等相关方法分析

转自:http://blog.csdn.net/yanbober/article/details/46128379/      【工匠若水 http://blog.csdn.net/yanbober】 原本打算自己写的,但是看到这篇文章,觉得写的太好了,,,...
  • TokgoLiang
  • TokgoLiang
  • 2016-01-08 10:18
  • 1400

从实例和源码角度理解 postInvalidate() 和 invalidate() 的区别与联系

区别与联系 使用情景 源码解析 区别与联系postInvalidate() 方法在非 UI 线程中调用,通知 UI 线程重绘。 invalidate() 方法在 UI 线程中调用,重绘当前 UI。使用情景近期在对 View 温故而知新的学习过程中,看到一个 postInvalidate() 方法,...
  • ziwang_
  • ziwang_
  • 2017-03-24 23:18
  • 1648
    个人资料
    • 访问:13744次
    • 积分:483
    • 等级:
    • 排名:千里之外
    • 原创:32篇
    • 转载:11篇
    • 译文:0篇
    • 评论:5条
    文章分类
    最新评论