加入收藏 | 设为首页 | 会员中心 | 我要投稿 应用网_丽江站长网 (http://www.0888zz.com/)- 科技、建站、数据工具、云上网络、机器学习!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

Android界面刷新达成

发布时间:2021-11-23 12:29:09 所属栏目:PHP教程 来源:互联网
导读:Android提供了Invalidate方法实现界面刷新,但是Invalidate不能直接在线程中调用,因为他是违背了单线程模型:Android UI操作并不是线程安全的,并且这些操作必须在UI线程中调用。 Android程序中可以使用的界面刷新方法有两种,分别是利用Handler和利用postI

Android提供了Invalidate方法实现界面刷新,但是Invalidate不能直接在线程中调用,因为他是违背了单线程模型:Android UI操作并不是线程安全的,并且这些操作必须在UI线程中调用。
 
Android程序中可以使用的界面刷新方法有两种,分别是利用Handler和利用postInvalidate()来实现在线程中刷新界面。
 
Android利用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();
 
                     }
 
              }
 
       }

(编辑:应用网_丽江站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读