invalidate()和postInvalidate() 的区别及使用

转载自:http://www.cnblogs.com/xingmeng/archive/2012/06/01/2530368.html

Android中实现view的更新有两组方法,一组是invalidate,另一组是postInvalidate,其中前者是在UI线程自身中使用,而后者在非UI线程中使用。 

 

利用invalidate()刷新界面

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

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

<span style="font-size: 12px; white-space: pre;">	</span>// 实例化一个handler
<span style="font-size: 12px; white-space: pre;">	</span>Handler myHandler = new Handler() {
<span style="font-size: 12px; white-space: pre;">	</span>// 接收到消息后处理
<span style="font-size: 12px; white-space: pre;">	</span>public void handleMessage(Message msg) {
<span style="font-size: 12px; white-space: pre;">		</span>switch (msg.what) {
<span style="font-size: 12px; white-space: pre;">			</span>case Activity01.REFRESH:
<span style="font-size: 12px; white-space: pre;">			</span>mGameView.invalidate(); // 刷新界面
<span style="font-size: 12px; white-space: pre;">			</span>break;
<span style="font-size: 12px; white-space: pre;">		</span>}
<span style="font-size: 12px; white-space: pre;">	</span>super.handleMessage(msg);
<span style="font-size: 12px; white-space: pre;">	</span>}
};

class GameThread implements Runnable {
<span style="font-size: 12px; white-space: pre;">	</span>public void run() {
<span style="font-size: 12px; white-space: pre;">		</span>while (!Thread.currentThread().isInterrupted()) {
<span style="font-size: 12px; white-space: pre;">			</span>Message message = new Message();
<span style="font-size: 12px; white-space: pre;">			</span>message.what = Activity01.REFRESH;
<span style="font-size: 12px; white-space: pre;">			</span>// 发送消息
<span style="font-size: 12px; white-space: pre;">			</span>Activity01.this.myHandler.sendMessage(message);
<span style="font-size: 12px; white-space: pre;">			</span>try {
<span style="font-size: 12px; white-space: pre;">			</span>Thread.sleep(100);
<span style="font-size: 12px; white-space: pre;">			</span>} catch (InterruptedException e) {
<span style="font-size: 12px; white-space: pre;">				</span>Thread.currentThread().interrupt();
<span style="font-size: 12px; white-space: pre;">			</span>}
<span style="font-size: 12px; white-space: pre;">		</span>}
<span style="font-size: 12px; white-space: pre;">	</span>}
}
<pre name="code" class="html" style="line-height: 19.5px;"><strong><span style="font-size: 18px;">使用postInvalidate()刷新界面</span></strong>
<span>	</span>//使用postInvalidate则比较简单,不需要handler,直接在线程中调用postInvalidate即可。 
class GameThread implements Runnable { public void run() { while (!Thread.currentThread().isInterrupted()) { try { Thread.sleep(100); } catch (InterruptedException e) { Thread.currentThread().interrupt(); } // 使用postInvalidate可以直接在线程中更新界面 mGameView.postInvalidate(); } }}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值