Android界面刷新的方法分享
时间:2022-06-20 15:20:52
Android提供了Invalidate方法实现界面刷新,但是Invalidate不能直接在线程中调用,因为他是违背了单线程模型:Android UI操作并不是线程安全的,并且这些操作必须在UI线程中调用。
Android程序中可以使用的界面刷新方法有两种,分别是利用Handler和利用postInvalidate()来实现在线程中刷新界面。
利用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();
}
}
}
}
使用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();
}
}
}
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
使用FeignClient设置动态Url
java FastJson的简单用法
Java Swing中的JButton、JComboBox、JList和JColorChooser组件使用案例
![](https://img.aspxhome.com/file/2023/1/77051_0s.jpg)
springboot+chatgpt+chatUI Pro开发智能聊天工具的实践
![](https://img.aspxhome.com/file/2023/2/68012_0s.jpg)
关于SpringBoot整合RabbitMQ实现死信队列
![](https://img.aspxhome.com/file/2023/8/94378_0s.png)
C#利用DesignSurface如何实现简单的窗体设计器
![](https://img.aspxhome.com/file/2023/9/126099_0s.png)
Kotlin协程与并发深入全面讲解
![](https://img.aspxhome.com/file/2023/6/127216_0s.png)
Android利用爬虫实现模拟登录的实现实例
![](https://img.aspxhome.com/file/2023/7/120067_0s.png)
java文件操作之java写文件简单示例
详解Spring 中 Bean 的生命周期
![](https://img.aspxhome.com/file/2023/2/132112_0s.png)
java.math包下计算浮点数和整数的类的实例
C#编程实现自定义热键的方法
C#使用yield关键字让自定义集合实现foreach遍历的方法
Java CAS原子操作详解
![](https://img.aspxhome.com/file/2023/9/110829_0s.png)
C#中类与接口的区别个人总结
Java中JDBC连接数据库详解
![](https://img.aspxhome.com/file/2023/2/58162_0s.png)
Java多线程下的单例模式参考
C#实现登录窗口(不用隐藏)
![](https://img.aspxhome.com/file/2023/6/106526_0s.gif)
Gradle:修改默认的Build配置文件名方式
![](https://img.aspxhome.com/file/2023/7/60617_0s.png)