`
ch_kexin
  • 浏览: 903087 次
  • 性别: Icon_minigender_2
  • 来自: 青岛
社区版块
存档分类
最新评论

Android UI更新的几种方法总结

 
阅读更多

 Android UI更新

做过Android开发的人都遇到过这样的问题:随着需求的变化,某些入口界面会出现UI的增减、内容变化和跳转界面变化等问题,这里就说明几种方法来实现 UI的更新。

1、Activity的 runOnUiThread   

textView = (TextView) findViewById( R.id.tv );
    new Thread(new Runnable() {
      @Override
      public void run() {
  
        runOnUiThread(new Runnable() {
          @Override
          public void run() {
            textView.setText( "更新UI了");
          }
        });
      }
    }).start();

 android Activity runOnUiThread() 方法使用 

 

2、Handler sendEmptyMessage()

package lib.com.myapplication;
  
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;
  
public class MainActivity extends AppCompatActivity {
  
  private TextView textView ;
  
  Handler handler = new Handler( ) {
    @Override
    public void handleMessage(Message msg) {
      super.handleMessage(msg);
      textView.setText( "Ui更新了");
    }
  };
  
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
  
    textView = (TextView) findViewById( R.id.tv );
    new Thread(new Runnable() {
      @Override
      public void run() {
        try {
          Thread.sleep( 2000 );
        } catch (InterruptedException e) {
          e.printStackTrace();
        }
  
        handler.sendEmptyMessage( 2 ) ;
      }
    }).start();
  
  }
}

 3、Handler  post()

package lib.com.myapplication;
import android.os.Bundle;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.widget.TextView;
  
public class MainActivity extends AppCompatActivity {
  
  private TextView textView ;
  
  Handler handler = new Handler();
  
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
  
    textView = (TextView) findViewById( R.id.tv );
  
    new Thread(new Runnable() {
      @Override
      public void run() {
        try {
          Thread.sleep( 2000 );
        } catch (InterruptedException e) {
          e.printStackTrace();
        }
  
        handler.post(new Runnable() {
          @Override
          public void run() {
            textView.setText( "Ui更新了");
          }
        }) ;
      }
    }).start();
  
  }
}

 在子线程中切换到主线程

new Thread(new Runnable() {
  @Override
  public void run() {
    LogUtil.d( "ttt 11111111111" + Thread.currentThread().getName() );
    new Handler(Looper.getMainLooper()).post(new Runnable() {
      @Override
      public void run() {
        LogUtil.d( "ttt 55555555" + Thread.currentThread().getName() );
      }
    });
  
    LogUtil.d( "ttt 22222222222" + Thread.currentThread().getName() );
    LogUtil.d( "ttt 33333333333" + Thread.currentThread().getName() );
    LogUtil.d( "ttt 44444444444" + Thread.currentThread().getName() );
  
  }
}).start();

 结果

ttt 11111111111Thread-155
ttt 22222222222Thread-155
ttt 33333333333Thread-155
ttt 44444444444Thread-155
ttt 55555555main

 可见这种方式可以快速切换线程,从log日志来看,切换到主线程不会阻塞子线程。

 

4、view Post() 

textView = (TextView) findViewById( R.id.tv );
    new Thread(new Runnable() {
      @Override
      public void run() {
        try {
          Thread.sleep( 2000 );
        } catch (InterruptedException e) {
          e.printStackTrace();
        }
  
        textView.post(new Runnable() {
          @Override
          public void run() {
            textView.setText( "Ui更新了");
          }
        }) ;
      }
    }).start();

 总结:

1、其实上面的四种方式都可归结于一种方式:handler 用于Android线程之间的通信。

2、为什么android要求只能在UI线程进行UI操作? 主要还是为了避免多线程造成的并发的问题。在单线程操作UI是安全的

分享到:
评论

相关推荐

    详解Android UI更新的几种方法

    Android UI 更新的方法有多种,以下是其中三种: 1. 使用 Activity.runOnUiThread 方法 利用 Activity.runOnUiThread(Runnable) 把更新 UI 的代码创建在 Runnable 中,然后在需要更新 UI 时,把这个 Runnable 对象...

    Android广播onReceiver回调更新ui

    总结来说,"Android广播onReceiver回调更新ui"主要关注的是如何在广播接收器接收到广播时,通过合适的机制在用户界面上展示相关信息。在实际开发中,这涉及到对Android广播机制的理解、广播接收器的注册与管理、...

    Xamarin.Android 非UI线程更新UI

    为了在非UI线程中安全地更新UI,Xamarin.Android提供了几种解决方案: 1. **Handler**: Handler是Android中的一个关键组件,它允许我们在线程间传递消息。创建一个Handler实例并将其与主线程Looper关联,然后在非UI...

    Android更新UI的四种方法详解

    以下介绍几种操作UI的方法。 一、使用Handler的handleMessage() Handler的构造 public Handler() { this(null, false); } public Handler(Callback callback, boolean async) { if (FIND_POTENTIAL_LEAKS) { ...

    android ui基础教程

    ### Android UI基础教程知识点概述 #### 一、Android UI基础知识 **1.1 Android UI简介** Android UI(用户界面)是Android应用程序与用户交互的主要方式。一个良好的UI设计能够极大地提升用户体验,使得用户更...

    AndroidUI界面开发规范

    ### AndroidUI界面开发规范 #### 一、引言 随着移动设备的普及和发展,用户界面(UI)设计在软件开发中的重要性日益凸显。一个良好的UI不仅能够提升用户体验,还能够帮助开发者更好地传达产品理念。本篇文章将从...

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

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

    Android的线程使用来更新UI

    Android提供了以下几种方式创建后台线程: - `AsyncTask`:一个轻量级的异步任务框架,用于在后台线程执行任务,并在完成后自动切换回主线程更新UI。它包含三个泛型参数,分别代表输入参数类型、进度类型和结果...

    android UI 特效集合

    下面将详细介绍几个常见的Android UI特效及其实现原理。 1. **渐变色过渡**: 渐变色是一种流行的视觉效果,可以用于背景、按钮或者任何其他UI元素。Android提供了`GradientDrawable`类来创建线性、径向或角度渐变...

    详解android异步更新UI的几种方法

    前言 我们知道在Android开发中不能在非...android中有下列几种异步更新ui的解决办法: Activity.runOnUiThread(Runnable) View.post(Runnable) long) View.postDelayed(Runnable, long) 使用handler(线程间通讯)

    Android UI设计官方教程(CHM)

    在Android UI设计中,有几个关键知识点是每个开发者和设计师都需要掌握的: 1. **Material Design**: Google推出的Material Design是Android设计的核心理念,它强调层次感、动态反馈和统一的视觉语言。了解Material...

    Android UI统一框架

    本文将深入探讨"Android UI统一框架"的设计理念和实现方法。 首先,理解UI框架的核心目标:它应该提供一套标准的界面组件,这些组件具有预定义的样式和交互行为,同时允许自定义以满足特定需求。在Android平台上,...

    Android 在子线程中更新UI的几种方法示例

    Android 在子线程中更新UI的几种方法示例 在 Android 开发中,子线程中更新 UI 是一个常见的需求。由于 Android 的 UI 组件只能在主线程中更新,因此需要使用特殊的方法来实现子线程中更新 UI。本文将介绍六种常见...

    Android-UI.rar_android_android ui

    1. **布局管理器**:Android提供了几种布局管理器,如LinearLayout(线性布局)、RelativeLayout(相对布局)、GridLayout(网格布局)、ConstraintLayout(约束布局)和FlexboxLayout(Flex布局)。它们各自有不同...

    Android UI 简介

    Android UI设计主要包括布局设计、控件使用、交互逻辑等几个方面。 #### 二、UI设计原理 Android UI设计主要通过XML文件进行定义,这种方式的好处在于可以将UI的定义与逻辑代码分离,使得开发者能够更加专注于业务...

    Android 使用AsyncTask异步更新UI界面

    `AsyncTask`是Android SDK提供的一种轻量级的异步任务处理类,它简化了在后台线程中执行任务并在UI线程中更新结果的过程。`AsyncTask`包含三个泛型参数:`Params`、`Progress`和`Result`,分别代表输入参数类型、...

Global site tag (gtag.js) - Google Analytics