zl程序教程

您现在的位置是:首页 >  移动开发

当前栏目

Android界面刷新的方法分享

Android方法 分享 界面 刷新
2023-06-13 09:15:00 时间

Android提供了Invalidate方法实现界面刷新,但是Invalidate不能直接在线程中调用,因为他是违背了单线程模型:AndroidUI操作并不是线程安全的,并且这些操作必须在UI线程中调用。

Android程序中可以使用的界面刷新方法有两种,分别是利用Handler和利用postInvalidate()来实现在线程中刷新界面。

利用Handler刷新界面
实例化一个Handler对象,并重写handleMessage方法调用invalidate()实现界面刷新;而在线程中通过sendMessage发送界面更新消息。

复制代码代码如下:


//在onCreate()中开启线程

      newThread(newGameThread()).start();、

      //实例化一个handler

      HandlermyHandler  =newHandler()

      {

             //接收到消息后处理

             publicvoidhandleMessage(Messagemsg)

             {

                    switch(msg.what)

                    {

                    caseActivity01.REFRESH:

                           mGameView.invalidate();       //刷新界面

                           break;

                    }

                    super.handleMessage(msg);

             }                  

      };

      classGameThreadimplementsRunnable

      {

             publicvoidrun()

             {

                    while(!Thread.currentThread().isInterrupted())

                    {

                           Messagemessage=newMessage();

                           message.what=Activity01.REFRESH;

                           //发送消息

                           Activity01.this.myHandler.sendMessage(message);

                           try

                           {

                                  Thread.sleep(100);

                           }

                           catch(InterruptedExceptione)

                           {

                                  Thread.currentThread().interrupt();

                           }

                    }

             }

      }


使用postInvalidate()刷新界面
使用postInvalidate则比较简单,不需要handler,直接在线程中调用postInvalidate即可。

复制代码代码如下:


 classGameThreadimplementsRunnable

      {

             publicvoidrun()

             {

                    while(!Thread.currentThread().isInterrupted())

                    {

                           try

                           {

                                  Thread.sleep(100);

                           }

                           catch(InterruptedExceptione)

                           {

                                  Thread.currentThread().interrupt();

                           }

                           //使用postInvalidate可以直接在线程中更新界面

                           mGameView.postInvalidate();

                    }

             }

      }