首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web前端 >

应用handler更新UI

2012-08-22 
使用handler更新UI?Android提供了Invalidate方法实现界面刷新,但是Invalidate不能直接在线程中调用。Androi

使用handler更新UI

?

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

?????????????????????}

??????????????}

???????}

热点排行