`

Android 总结4种线程中操作UI界面的方法

 
阅读更多

我们经常会在后台线程中去做一些耗时的操作,比如去网络取数据。但是当数据取回来,需要显示到页面上的时候,会遇到一些小麻烦,因为我们都知道,android的UI页面是不允许在其他线程直接操作的。下面总结4中方法用来在线程中操作UI界面。

方法一:Handler

子线程调用Handler的sendMessage(message)发送事件。

Java代码 复制代码 收藏代码
  1. mHandler = new Handler() {   
  2.    @Override  
  3.    public void handleMessage(Message msg) {   
  4.         //操作界面   
  5.        myText.setText( 来自网络的信息);   
  6.       super.handleMessage(msg);   
  7.    }   
  8.   };  
mHandler = new Handler() {
   @Override
   public void handleMessage(Message msg) {
        //操作界面
       myText.setText( 来自网络的信息);
      super.handleMessage(msg);
   }
  };

 

Java代码 复制代码 收藏代码
  1. public class MyThread extends Thread {   
  2.      public void run() {   
  3. ​    ​    ​    // 耗时操作   
  4. ​    ​    ​    ​loadNetWork();   
  5.             Message msg = new Message();   
  6.             mHandler.sendMessage(msg);//向Handler发送消息,   
  7.       }   
  8.  }  
public class MyThread extends Thread {
     public void run() {
​    ​    ​    // 耗时操作
​    ​    ​    ​loadNetWork();
            Message msg = new Message();
            mHandler.sendMessage(msg);//向Handler发送消息,
      }
 }



方法二:View.post(Runnable)

Java代码 复制代码 收藏代码
  1. public void onClick( View v ) {   
  2.         new Thread( new Runnable() {   
  3.                 public void run() {   
  4.                        // 耗时操作   
  5. ​    ​    ​    ​    ​    ​      loadNetWork();   
  6. ​                          myText.( new Runnable() {   
  7.                                   myText.setText( 来自网络的信息);   
  8.                           });   
  9.                  }   
  10.         }).start();   
  11. }  
public void onClick( View v ) {
        new Thread( new Runnable() {
                public void run() {
                       // 耗时操作
​    ​    ​    ​    ​    ​      loadNetWork();
​                          myText.( new Runnable() {
                                  myText.setText( 来自网络的信息);
                          });
                 }
        }).start();
}



方法三:Activity.runOnUiThread(Runnable)
与view.post类似

Java代码 复制代码 收藏代码
  1. public void onClick( View v ) {   
  2.         new Thread( new Runnable() {   
  3.                 public void run() {   
  4.                        // 耗时操作   
  5. ​    ​    ​    ​    ​    ​      loadNetWork();   
  6. ​                         Activity.runOnUiThread.( new Runnable() {   
  7.                                   myText.setText( 来自网络的信息);   
  8.                           });   
  9.                  }   
  10.         }).start();   
  11. }  
public void onClick( View v ) {
        new Thread( new Runnable() {
                public void run() {
                       // 耗时操作
​    ​    ​    ​    ​    ​      loadNetWork();
​                         Activity.runOnUiThread.( new Runnable() {
                                  myText.setText( 来自网络的信息);
                          });
                 }
        }).start();
}



方法四:AsyncTask

Java代码 复制代码 收藏代码
  1. //UI线程中执行   
  2. new DownloadImageTask().execute( "www.91dota.com" );  
 //UI线程中执行
 new DownloadImageTask().execute( "www.91dota.com" );

 

Java代码 复制代码 收藏代码
  1. private class LoadTask extends AsyncTask {   
  2.     protected String doInBackground( String... url ) {   
  3.          return loadDataFormNetwork( url[0] );//后台耗时操作   
  4.     }   
  5.   
  6.     protected void onPostExecute( String result ) {   
  7.           myText.setText( result ); //得到来自网络的信息刷新页面    
  8.   
  9.    }   
  10. }  

 

from:http://iaiai.iteye.com/blog/1183681

 

分享到:
评论

相关推荐

    Android线程中操作UI界面的方法

    本文将详细介绍四种常见的在Android线程中操作UI界面的方法:使用Handler、View.post(Runnable)、Activity.runOnUiThread(Runnable)以及AsyncTask。 ### 1. 使用Handler **原理**: `Handler`机制是Android中处理...

    Xamarin.Android 非UI线程更新UI

    总结起来,Xamarin.Android的非UI线程更新UI涉及了对Android线程模型的理解以及各种线程间通信技术的运用。通过Handler、RunOnUiThread、AsyncTask等方法,我们可以确保UI操作始终在主线程中安全执行。遵循最佳实践...

    Android Thread线程动态操作UI的Demo

    在Android应用开发中,线程(Thread)的使用是至关重要的,特别是在涉及到用户界面(UI)更新时。Android系统默认的主线程(Main Thread)负责处理UI交互,如果在这个线程中执行耗时操作,会阻塞UI更新,导致应用无...

    利用多线程来提高UI界面中的用户体验

    本主题将深入探讨如何利用多线程来提高UI界面中的用户体验,并提供源码和UML文档供参考。 一、多线程基础 1. 线程与进程:线程是操作系统分配处理器时间的基本单位,一个进程中可以包含多个线程。相比进程,线程间...

    android 通过服务线程改变ui

    这种方法保证了对UI的操作是在正确的线程中进行的,避免了线程安全问题。 自Android 1.5(API Level 3)起,引入了`AsyncTask`类,它是为了解决异步任务和UI交互而设计的。`AsyncTask`包含三个泛型参数,分别代表...

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

    在Android开发中,UI线程(主线程)主要负责用户界面的绘制与交互,因此它必须保持流畅,避免被耗时操作阻塞。为了解决这个问题,Android提供了多种异步处理机制,其中一种常见的方式是使用`Thread`配合`Handler`来...

    android 多线程 下载 更新 ui 例子

    4. **进度条更新**:为了显示下载进度,需要在后台线程中定期更新下载进度,并通过Handler或者使用runOnUiThread()方法将进度信息传递到主线程进行UI更新。这通常涉及到使用ProgressDialog或ProgressBar控件。 5. *...

    Android 实现界面刷新的几种方法

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

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

    在Android应用开发中,UI线程(也称为主线程)负责处理用户交互和绘制界面,而子线程通常用于执行耗时操作,如网络请求、数据处理等。由于Android系统的安全机制,直接在子线程中修改UI是不允许的,因此我们需要通过...

    无界面的UI线程交互

    在软件开发中,UI线程(用户界面线程)通常负责处理用户交互和更新界面,而后台线程则用于执行耗时的操作,如计算或网络通信,以避免阻塞UI,确保用户界面的流畅性。"无界面的UI线程交互"这个主题探讨的是在没有直接...

    android 更新 UI 线程 handler

    在Android开发中,更新UI(用户界面)是一个常见的任务,但是由于Android的主线程(也称为UI线程)是负责处理用户交互和绘制界面的,所以直接在后台线程进行UI更新可能会导致程序崩溃或者界面卡顿。为了解决这个问题...

    安卓UI线程机制 ,在子线程中访问UI

    理解Android的UI线程机制至关重要,因为错误地在非UI线程中操作UI组件会导致应用崩溃或出现不一致的用户界面。下面将详细阐述Android UI线程的工作原理,以及如何在子线程中安全地访问UI。 一、Android UI线程 1. ...

    Android 线程更新UI

    在学习和实践中,理解Android线程模型和正确更新UI的方法对于提升应用性能和用户体验至关重要。确保遵循最佳实践,避免主线程阻塞,合理安排任务执行,以及正确处理线程间的通信。通过实践和调试,你将能熟练掌握...

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

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

    Android 多线程下载+UI进度条刷新

    在Android系统中,主线程(UI线程)主要负责处理用户界面交互,而后台任务如网络请求、数据处理等通常不应在主线程中执行,因为这会阻塞UI更新,导致应用无响应(ANR)。因此,我们需要使用子线程(也称工作线程)来...

    工作线程 UI线程实例

    在编程领域,尤其是在Android或Java应用开发中,工作线程(Worker Thread)和用户界面线程(UI Thread)是两个非常关键的概念。正确理解和运用它们对于优化程序性能、避免阻塞用户界面至关重要。本文将通过实例来...

    Android的线程使用来更新UI

    下面将详细探讨Android线程的使用以及如何在后台线程中处理数据并更新UI。 1. 主线程与UI更新 主线程是Android应用的入口,负责处理所有与UI相关的事件,如触摸事件、键盘输入等。任何对UI的操作,包括添加、删除或...

    UI界面多线程简单实现和线程捕获异常问题

    本文将探讨如何在UI界面中简单实现多线程以及如何处理线程中的异常问题。 首先,我们需要理解在UI界面中使用多线程的基本概念。主线程通常负责处理用户交互和绘制UI,而后台线程则处理计算密集型任务。在Windows...

    子线程中更新UI线程的三种方法

    在Android开发中,由于UI操作必须在主线程中执行,因此当我们在子线程中处理数据后,需要将结果安全地传递到主线程进行UI更新。以下将详细讲解三种在子线程中更新UI线程的方法,特别是Handler的两种用法。 1. ...

Global site tag (gtag.js) - Google Analytics