Android提供了Invalidate方法实现界面刷新,但是Invalidate不能直接在线程中调用。

Android UI操作并不是线程安全的,并且这些操作必须在UI线程中调用。

Android程序中可以使用的界面刷新方法有两种,

  1. 利用Handler
  2. 利用postInvalidate()

实现在线程中刷新界面。

1.利用Handler刷新界面

实例化一个Handler对象,并重写handleMessage方法调用invalidate()实现界面刷新;

而在线程中通过sendMessage发送界面更新消息。

//onCreate()中开启线程

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

//实例化一个handler

HandlermyHandler= 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();

}

}

}

更多相关文章

  1. Android(安卓)AsyncTask实现
  2. Android(安卓)下拉刷新(刷新布局需用ScrollView包裹)
  3. IntentService源码解读
  4. 界面中显示NumberPicker,修改字体大小
  5. Android(安卓)调用H5界面(交互)
  6. android点击界面隐藏键盘
  7. SQLiteCursor和ContentProvider的线程安全问题
  8. Android(安卓)多线程下载
  9. 交互式实例

随机推荐

  1. Android(安卓)App启动图启动界面(Splash)的
  2. 跨应用绑定Service
  3. Android(安卓)数据存储 Room
  4. android intent 5.1
  5. android启动中遇到的2个问题
  6. Android(安卓)源代码下载
  7. [置顶] Android:自定义View实现绚丽的圆形
  8. repo下载android出现fatal: Unable to fi
  9. 部分android小知识点记录
  10. Android(安卓)View.MeasureSpec