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 ...
Android Handler定时更新UI
ndroid异步处理一:使用Thread+Handler实现非UI线程更新UI界面
Android异步处理一:使用Thread+Handler实现非UI线程更新UI界面。
新线程中发送Handle消息,主线程中处理消息并更新TextView的值
Handler子线程更新ui的简单demo
简单实现更新UI的操作,仅供学习参考 这里用到handler类,runnable类,按钮的点击事件
主要介绍了android使用handler异步更新ui的示例,大家参考使用吧
NULL 博文链接:https://rayleung.iteye.com/blog/411860
简单地实现播放器功能。使用MediaPlayer,简单的多线程编程,使用Handler 更新UI,简单的多线程编程,使用Handler 更新UI,使用Service 与Activity 进行通信
Demo-实例讲解线程池里面的UI如何刷新,处理两个开发者头疼的问题:...1. 数据经常需要读取更新,并且比较耗时,需要分步刷新UI. 2. UI界面切换后,如何停止掉子线程里面正在读取的数据而不会将旧数据刷新到新UI界面上.
Handler的基本使用,通过Handler更新UI中TextView的显示
Looper和Handler实现UI线程和子线程的通信
在Android中,在非主线程中更新UI控件是不安全的,app在运行时会直接Crash,所以当我们需要在非主线程中更新UI控件,那么就需要用到Handler和Message来实现 Demo中,使用到一个按钮和一个TextView,点击按钮之后改变...
Android的线程使用来更新UI----Thread、Handler、Looper、TimerTask等
主要介绍了android使用handler ui线程和子线程通讯更新ui的方法,大家参考使用吧
demo01: 通过handler.post()的方法可以更新ui demo02: 一秒钟切换一张图片 demo03: 霓虹灯动态效果的显示 demo04: 倒计时,停止倒计时 demo05: 通过handler.sendMessage和handleMessage发送处理消息 demo06: message...
Android更新Ui的几种方法和见解,常用的更新ui有 - handler.sendMessage(); - handler.post(); - 在activity中可以 runOnUiThread(); - 在子view中可以 view.post()