`

使用handler更新UI

阅读更多

 

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

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

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

 

  1. 利用Handler
  2. 利用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();

                     }

              }

       }

分享到:
评论

相关推荐

    Android编程实现使用handler在子线程中更新UI示例

    本文实例讲述了Android编程实现使用handler在子线程中更新UI。分享给大家供大家参考,具体如下: MainActivity代码: package com.example.ui; import android.os.Handler; import android.os.Message; import ...

    使用Handler实现异步更新UI例子

    本教程将重点讲解如何使用Handler机制来实现在后台线程中执行任务并在主线程中更新UI。 Handler是Android中一种用于线程间通信的重要工具,它允许你在不同的线程之间发送和处理消息。Handler的运作机制基于Message...

    Android Handler定时更新UI

    本文将深入探讨“Android Handler定时更新UI”的相关知识点,以及如何使用CounterDemo来实现这一功能。 首先,我们需要理解Android的线程模型。Android应用的主要执行线程被称为“主线程”或“UI线程”,它负责处理...

    ndroid异步处理一:使用Thread+Handler实现非UI线程更新UI界面

    为了解决这个问题,Android提供了多种异步处理机制,其中一种常见的方式是使用`Thread`配合`Handler`来实现非UI线程执行耗时任务并更新UI。本篇将详细介绍这一方法。 首先,我们需要理解Android的线程模型。Android...

    Android异步处理一:使用Thread+Handler实现非UI线程更新UI界面

    ### Android异步处理详解:使用Thread+Handler实现非UI线程更新UI界面 #### 概述 Android系统中,每一个应用程序都运行在一个独立的Dalvik虚拟机进程中。当应用程序启动时,系统会创建一个主线程(MainThread),也...

    Android 线程更新UI

    // 使用Handler更新UI MainActivity.this.runOnUiThread(new Runnable() { @Override public void run() { updateTextView(result); } }); } }).start(); ``` 以上代码展示了如何在一个新线程中执行耗时...

    利用Handler来更新android的UI

    在Android开发中,更新UI是一项常见的任务,尤其是在...理解和熟练使用`Handler`,能够帮助开发者更好地实现异步操作和UI更新,提高应用的用户体验。通过阅读源码,还可以进一步理解Android消息处理系统的内部机制。

    android 更新 UI 线程 handler

    // 使用runOnUiThread更新UI runOnUiThread(new Runnable() { @Override public void run() { TextView textView = findViewById(R.id.my_view); textView.setText(newText); } }); } }).start(); ``` ...

    智能家居系统 handler-教案.doc

    6. **课堂小结**:强调Handler的特点(如消息队列、回调处理)及其在实际项目中的作用,指出根据项目需求设计思路的重要性,以及在Android中正确使用Handler更新UI的难点。 通过这个教案,学生不仅能掌握Handler的...

    android Handler的使用(一)

    本文将深入探讨`Handler`的使用,帮助开发者理解如何有效地利用这一机制来更新UI、管理异步任务以及避免UI线程阻塞。 `Handler`的基本原理是基于消息队列(Message Queue)和Looper的循环处理。在Android系统中,每...

    安卓UI线程和子线程通讯更新UI实例

    子线程通过发送Message或者Runnable对象到Handler,Handler会在UI线程中接收到这些消息并执行相应的代码,从而更新UI。首先在UI线程中创建Handler: ```java Handler handler = new Handler(Looper.getMainLooper...

    Testhandler,Handler子线程更新ui的简单demo

    Handler子线程更新ui的简单demo

    android handler

    以下是一个简单的使用Handler更新UI的例子: ```java // 创建Handler实例 Handler handler = new Handler() { @Override public void handleMessage(Message msg) { // 更新UI TextView textView = (TextView) ...

    Android Handler用法

    // 使用Handler更新UI Message msg = new Message(); msg.what = 1; msg.obj = result; mHandler.sendMessage(msg); } }).start(); } }); ``` 四、Handler与Activity切换 在Activity之间切换时,`Handler`...

    王栋栋_周报关于android异步消息处理机制handler_20190524.doc

    使用Handler更新UI** - 在后台线程中执行完耗时操作后,可以通过Handler将结果传递给UI线程,并更新UI。 - 例如,在子线程中进行网络请求后,通过Handler将结果传递给UI线程进行处理。 #### 六、HandlerThread与...

    通过Messenger实现Android Service更新UI

    客户端的Handler将接收到这个消息,从而可以在UI线程中更新UI。 ```java @Override public void handleMessage(Message msg) { if (msg.what == MSG_CODE) { // 更新UI的逻辑 updateUI(); } } ``` 5. 关闭服务...

    Android的更新ui大合集,统共4种方法

    本篇将详细讲解标题所提及的四种Android更新UI的方法,并结合描述中的"handler"和"thread"两个关键词,深入探讨如何在后台线程处理耗时任务并及时更新UI。 1. 主线程(UI线程) Android应用的主线程主要负责处理与...

    Android耗时操作Demo

    2. **使用Handler更新UI**: 在主线程中定义的Handler,可以重写`handleMessage(Message msg)`方法。当子线程完成一部分下载工作后,它会发送一个Message对象到Handler,这个Message对象可以携带下载进度。Handler...

Global site tag (gtag.js) - Google Analytics