`
triple_zhao
  • 浏览: 7461 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

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

阅读更多

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

方法一:Handler

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

mHandler = new Handler() {
   @Override
   public void handleMessage(Message msg) {
        //操作界面
       myText.setText( 来自网络的信息);
      super.handleMessage(msg);
   }
  };

 

public class MyThread extends Thread {
     public void run() {
​    ​    ​    // 耗时操作
​    ​    ​    ​loadNetWork();
            Message msg = new Message();
            mHandler.sendMessage(msg);//向Handler发送消息,
      }
 }


方法二:View.post(Runnable )

public void onClick( View v ) {
        new Thread( new Runnable() {
                public void run() {
                       // 耗时操作
​    ​    ​    ​    ​    ​      loadNetWork();
​                          myText.( new Runnable() {
                                  myText.setText( 来自网络的信息);
                          });
                 }
        }).start();
}


方法三:Activity.runOnUiThread(Runnable )

与view.post类似

public void onClick( View v ) {
        new Thread( new Runnable() {
                public void run() {
                       // 耗时操作
​    ​    ​    ​    ​    ​      loadNetWork();
​                         Activity.runOnUiThread.( new Runnable() {
                                  myText.setText( 来自网络的信息);
                          });
                 }
        }).start();
}


方法四:AsyncTask

 //UI线程中执行
 new DownloadImageTask().execute( "www.91dota.com" );

 

 private class LoadTask extends AsyncTask {
     protected String doInBackground( String... url ) {
          return loadDataFormNetwork( url[0] );//后台耗时操作
     }

     protected void onPostExecute( String result ) {
           myText.setText( result ); //得到来自网络的信息刷新页面 

    }


}
更多android文章: 5进制空间

 

分享到:
评论

相关推荐

    qt编程_在子线程中更新UI界面

    在Qt编程中,UI(用户界面)的更新通常在主线程中...总结来说,Qt编程中在子线程中更新UI界面涉及到多线程编程、信号与槽机制以及线程安全的UI更新策略。理解这些概念并正确实施,可以确保应用程序的响应性和用户体验。

    C# 线程更新UI界面

    本篇文章将深入探讨如何通过委托在子线程中更新UI界面。 1. **多线程基础知识** - 线程:线程是程序中的执行流,每个进程至少有一个线程。 - 主线程:应用程序启动时创建的第一个线程,负责处理UI交互和事件。 -...

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

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

    C#-WinForm跨线程修改UI界面的实例

    本实例“C#-WinForm跨线程修改UI界面的实例”主要展示了如何利用`Task`和`MethodInvoker`来实现跨线程安全地更新UI。`Task`是.NET Framework中的一个类,用于表示异步操作,而`MethodInvoker`是一个委托类型,可以...

    c#多线程中子线程动态改变ui控件

    在桌面应用程序中,控制UI界面是一个非常重要的任务。特别是在C#多线程编程中,子线程更新UI控件是一个常见的问题。本文将总结C#子线程更新UI控件的方法,介绍两种常用的方法,以便读者更好地理解和应用。 一、使用...

    C#WinForm跨线程更新UI的四种方法

    以上四种方法都可以有效地解决WinForms应用中跨线程更新UI的问题,选择哪种方法主要取决于具体需求,如是否需要等待后台操作完成、是否希望简化编程模型等。在实际开发中,通常推荐使用BackgroundWorker,因为它提供...

    WinForm C# 多线程编程并更新界面(UI)

    下面我们来讨论如何在 WinForm 中使用 C# 实现多线程编程并更新界面(UI)。 多线程编程 多线程编程是一种使应用程序可以同时执行多个任务的技术。它可以提高应用程序的响应速度和用户体验。在 WinForm 中,我们...

    qt多线程实例-数据处理和UI界面显示

    这个实例“qt多线程实例-数据处理和UI界面显示”很可能是为了展示如何在不阻塞UI的情况下进行繁重的数据处理任务。 在单线程应用中,如果数据处理任务耗时较长,程序会冻结,用户界面无法响应,这将导致用户体验...

    WPF 使用线程更新UI

    4. **Invoke或BeginInvoke方法**:当后台线程需要更新UI时,需要调用Dispatcher的Invoke或BeginInvoke方法。Invoke是同步的,会阻塞当前线程直到UI更新完成;BeginInvoke是异步的,不会阻塞当前线程,而是将更新任务...

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

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

    JAVA多线程的一个带UI界面的例子

    可能包括存款、取款、转账等功能,每个操作都在独立的线程中执行,而UI界面则实时显示交易状态。开发者可能会使用` swing.Timer `或`ScheduledExecutorService`来定期执行某些任务,如更新账户余额。 总之,这个...

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

    以上就是使用`Thread`和`Handler`实现非UI线程更新UI界面的基本步骤。这种方式简单易懂,但需要注意的是,`Handler`可能导致内存泄漏,特别是在长时间运行的任务中,如果持有对`Activity`的引用,可能会阻止`...

    无界面的UI线程交互

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

    多UI线程界面

    在C#编程中,WinForms应用通常依赖于一个单一的用户界面(UI)线程来处理所有的界面更新和用户交互。这种设计模式虽然简单,但当UI线程被长时间运行的任务阻塞时,就会出现标题中提到的问题:界面卡顿、控件响应慢,...

    winForm 多线程操作UI

    在传统的单线程环境中,UI更新和后台任务往往在同一线程中执行,导致用户界面在处理耗时任务时可能出现卡顿或无响应。为了解决这个问题,开发者可以利用多线程技术,将耗时操作放在后台线程上,同时保持UI线程的流畅...

    C#多线程解决界面卡死问题的完美解决方案_极简版

    总结来说,C#中多线程解决界面卡死问题的方法主要包括使用BackgroundWorker和async/await模式。这两种方法都旨在将耗时操作与UI更新分离,确保用户界面始终响应。理解并熟练运用这些技术,能够显著提升C#应用的用户...

    工作线程 UI线程实例

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

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

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

    C#子线程更新UI控件的方法实例总结

    由于UI界面通常运行在主线程中,为保证用户界面的响应性和避免线程冲突,我们需要遵循特定的规则来安全地更新控件。本文将详细介绍两种在子线程中更新UI控件的常用方法。 **1. 使用控件自身的Invoke/BeginInvoke...

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

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

Global site tag (gtag.js) - Google Analytics