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();                     }              }       }





更多相关文章

  1. Android(安卓)深入解析用户界面(一)
  2. Android异步处理系列文章索引
  3. 【Android】Android消息处理机制
  4. Android中的多线程之handler
  5. Android内存泄漏查找
  6. Android中EventBus事件总线发送网络请求结果更新UI
  7. android 的线程模型和AsyncTask
  8. Android(安卓)AsyncTask实现异步任务的执行
  9. Android(安卓)Handler 异步消息处理机制 《第一行代码》

随机推荐

  1. Android NDK: Host 'awk' tool is outdat
  2. 关于Android连接远程数据库(mysql、oracle
  3. Android(安卓)5.0 documentation CHM 版
  4. 整理分享ImageView属性大全
  5. android 休眠唤醒机制分析(一)
  6. 如何在横屏控制软键盘显示一部分
  7. android 一 android 的生命周期
  8. Android configChanges用法
  9. android中ImageView属性及其详解
  10. Android 搜索框:SearchView 的属性和用法