Android提供了Invalidate方法实现界面刷新,但是Invalidate不能直接在线程中调用。
Android UI操作并不是线程安全的,并且这些操作必须在UI线程中调用。
Android程序中可以使用的界面刷新方法有两种,
-
利用Handler
-
利用postInvalidate()
实现在线程中刷新界面。
1.利用Handler刷新界面
实例化一个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();
}
}
}
}
2-使用postInvalidate()刷新界面
使用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();
}
}
}
分享到:
相关推荐
本文实例讲述了Android编程实现使用handler在子线程中更新UI。分享给大家供大家参考,具体如下: MainActivity代码: package com.example.ui; import android.os.Handler; import android.os.Message; import ...
本教程将重点讲解如何使用Handler机制来实现在后台线程中执行任务并在主线程中更新UI。 Handler是Android中一种用于线程间通信的重要工具,它允许你在不同的线程之间发送和处理消息。Handler的运作机制基于Message...
本文将深入探讨“Android Handler定时更新UI”的相关知识点,以及如何使用CounterDemo来实现这一功能。 首先,我们需要理解Android的线程模型。Android应用的主要执行线程被称为“主线程”或“UI线程”,它负责处理...
为了解决这个问题,Android提供了多种异步处理机制,其中一种常见的方式是使用`Thread`配合`Handler`来实现非UI线程执行耗时任务并更新UI。本篇将详细介绍这一方法。 首先,我们需要理解Android的线程模型。Android...
### Android异步处理详解:使用Thread+Handler实现非UI线程更新UI界面 #### 概述 Android系统中,每一个应用程序都运行在一个独立的Dalvik虚拟机进程中。当应用程序启动时,系统会创建一个主线程(MainThread),也...
// 使用Handler更新UI MainActivity.this.runOnUiThread(new Runnable() { @Override public void run() { updateTextView(result); } }); } }).start(); ``` 以上代码展示了如何在一个新线程中执行耗时...
在Android开发中,更新UI是一项常见的任务,尤其是在...理解和熟练使用`Handler`,能够帮助开发者更好地实现异步操作和UI更新,提高应用的用户体验。通过阅读源码,还可以进一步理解Android消息处理系统的内部机制。
// 使用runOnUiThread更新UI runOnUiThread(new Runnable() { @Override public void run() { TextView textView = findViewById(R.id.my_view); textView.setText(newText); } }); } }).start(); ``` ...
6. **课堂小结**:强调Handler的特点(如消息队列、回调处理)及其在实际项目中的作用,指出根据项目需求设计思路的重要性,以及在Android中正确使用Handler更新UI的难点。 通过这个教案,学生不仅能掌握Handler的...
本文将深入探讨`Handler`的使用,帮助开发者理解如何有效地利用这一机制来更新UI、管理异步任务以及避免UI线程阻塞。 `Handler`的基本原理是基于消息队列(Message Queue)和Looper的循环处理。在Android系统中,每...
子线程通过发送Message或者Runnable对象到Handler,Handler会在UI线程中接收到这些消息并执行相应的代码,从而更新UI。首先在UI线程中创建Handler: ```java Handler handler = new Handler(Looper.getMainLooper...
Handler子线程更新ui的简单demo
以下是一个简单的使用Handler更新UI的例子: ```java // 创建Handler实例 Handler handler = new Handler() { @Override public void handleMessage(Message msg) { // 更新UI TextView textView = (TextView) ...
// 使用Handler更新UI Message msg = new Message(); msg.what = 1; msg.obj = result; mHandler.sendMessage(msg); } }).start(); } }); ``` 四、Handler与Activity切换 在Activity之间切换时,`Handler`...
使用Handler更新UI** - 在后台线程中执行完耗时操作后,可以通过Handler将结果传递给UI线程,并更新UI。 - 例如,在子线程中进行网络请求后,通过Handler将结果传递给UI线程进行处理。 #### 六、HandlerThread与...
客户端的Handler将接收到这个消息,从而可以在UI线程中更新UI。 ```java @Override public void handleMessage(Message msg) { if (msg.what == MSG_CODE) { // 更新UI的逻辑 updateUI(); } } ``` 5. 关闭服务...
本篇将详细讲解标题所提及的四种Android更新UI的方法,并结合描述中的"handler"和"thread"两个关键词,深入探讨如何在后台线程处理耗时任务并及时更新UI。 1. 主线程(UI线程) Android应用的主线程主要负责处理与...
2. **使用Handler更新UI**: 在主线程中定义的Handler,可以重写`handleMessage(Message msg)`方法。当子线程完成一部分下载工作后,它会发送一个Message对象到Handler,这个Message对象可以携带下载进度。Handler...