`
wangleyiang
  • 浏览: 220938 次
社区版块
存档分类
最新评论

Android 使用AsyncTask更新UI

阅读更多

AsyncTask可以轻松容易的跟新UI,而开发者需要做的是在不同的回调函数中嵌入代码逻辑即可。关于Android中的线程相关内容,可以参考开发者网站:developer.android.com/guide/components/processes-and-threads.html

 

开发者网站对AsyncTask的说明已经很明确了,参考地址:http://developer.android.com/reference/android/os/AsyncTask.html,下面从代码角度看看实现过程:

  1. 继承AsyncTask,定义自己的异步任务;
  2. 在自定义AsyncTask中的回调函数中嵌入操作逻辑;
  3. 创建AsyncTask并执行;

主要代码:

import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class RefreshUIActivity extends Activity implements OnClickListener {
    
	private TextView textView;
	private Button refreshButton;
	
	/**
	 * 标识异步任务
	 */
	private int identifier;
	
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        requestWindowFeature(Window.FEATURE_PROGRESS);
		setProgressBarVisibility(true);
        
        setContentView(R.layout.main);
        
        textView = (TextView) findViewById(R.id.textView1);
        refreshButton = (Button) findViewById(R.id.button1);
        
        refreshButton.setOnClickListener(this);
        
    }

	@Override
	public void onClick(View v) {
		
		switch (v.getId()) {
		case R.id.button1:
			// 创建异步任务
			CustomizedAsyncTask task = new CustomizedAsyncTask(++identifier);
			task.execute("0", "25", "50", "75", "100");
			task = null;
			break;
		default:
			break;
		}
		
	}
	
	class CustomizedAsyncTask extends AsyncTask<String, Integer, String> {
		
		private String identifier;
		
		public CustomizedAsyncTask(int id) {
			identifier = "[" + id + "]";
		}

		@Override
		protected void onCancelled() {
			super.onCancelled();
			textView.append(identifier + "onCancelled\n");
		}

		@Override
		protected void onPostExecute(String result) {
			super.onPostExecute(result);
			textView.append(identifier + "onPostExecute result:" + result + "\n");
		}

		@Override
		protected void onPreExecute() {
			super.onPreExecute();
			textView.append(identifier + "onPreExecute\n");
		}

		@Override
		protected void onProgressUpdate(Integer... values) {
			super.onProgressUpdate(values);
			setProgress(values[0] * 100);
			textView.append(identifier + "onProgressUpdate Value: " + values[0] + "%\n");
		}

		@Override
		protected String doInBackground(String... params) {
			for (String param : params) {
				try {
					// 模拟费时操作
					Thread.sleep(2 * 1000);
					// 触发onProgressUpdate方法
					publishProgress(Integer.valueOf(param));
				} catch (Exception e) {
					e.printStackTrace();
				}
				System.out.println(param);
			}
			System.out.println(identifier + "doInBackground");
			return "Finished";
		}
		
	}
	
}

 说明:

  • 关于AsyncTask的各个回调函数就不做说明,参考开发者文档即可;
  • 在自定义的AsyncTask的回调函数中,可以更新UI的函数内都出现了对textView的更新操作;还有其它方法更新UI,只要可以达到操作要求,又能让代码易于理解,哪种方式倒是无所谓;

布局文件:

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical" >

        <TextView
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>

        <Button
            android:id="@+id/button1"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="RefreshUI" />
    </LinearLayout>

</ScrollView>

 一次点击运行效果:



 

 

 

 

四次点击运行结果:



 

多说一句:千万不要在protected String doInBackground(String... params)方法中操作UI哦!:)

 

 

 

 

  • 大小: 15.4 KB
  • 大小: 17 KB
  • 大小: 22.1 KB
  • 大小: 28.9 KB
  • 大小: 68.7 KB
分享到:
评论

相关推荐

    Android 使用AsyncTask异步更新UI界面

    本文将详细探讨如何在Android中使用`AsyncTask`来异步更新UI界面。 ### 一、AsyncTask概述 `AsyncTask`是Android SDK提供的一种轻量级的异步任务处理类,它简化了在后台线程中执行任务并在UI线程中更新结果的过程...

    Android异步处理二:使用AsyncTask异步更新UI界面

    Android异步处理二:使用AsyncTask异步更新UI界面。

    android asynctask的fragment更新UI(附线程管理)

    通过这个例子,我们可以看到在Fragment中使用Android的AsyncTask进行线程管理和UI更新的基本步骤。然而,随着Android版本的更新,推荐使用其他更现代的解决方案,如`LiveData`、`ViewModel`、`Coroutines`或`...

    Android AsyncTask用法和异步加载图片.rar

    本资料包主要讲解了如何使用`AsyncTask`进行异步加载图片,这对于在UI线程中保持流畅用户体验至关重要。 `AsyncTask`是Android SDK中的一个类,它为开发者提供了简单的多线程和回调功能。它的核心思想是将长时间...

    android中AsyncTask的用法

    在Android应用开发中,AsyncTask是一个用于在后台线程执行耗时操作并更新UI的工具类,它是Android 1.5版本引入的。AsyncTask的设计初衷是为了简化异步编程,避免直接操作线程和Handler带来的复杂性。下面我们将详细...

    Android广播onReceiver回调更新ui

    通常,我们推荐使用Handler或AsyncTask来异步处理UI更新。在主线程(UI线程)中更新UI,确保操作的顺利进行。 5. **测试广播接收器**: 文件名为"testbroadcast"可能是一个用于测试广播接收器的类或项目。测试广播...

    Android 使用AsyncTask实现断点续传

    在Android开发中,异步...务必注意,随着Android版本的更新,`AsyncTask`逐渐暴露出一些问题,例如内存泄漏和并发问题。因此,在最新的Android开发中,推荐使用`LiveData`、`ViewModel`和`Worker`等现代异步处理框架。

    Android学习笔记(三二):线程:后台异步任务AsyncTask_IT168文库

    `AsyncTask`是Android提供的一个轻量级的多线程框架,用于执行后台任务并更新UI。它简化了异步任务的实现过程,使得开发者无需手动管理线程生命周期,从而避免了复杂的线程同步问题。`AsyncTask`的设计基于泛型,有...

    Android开发之AsyncTask机制及使用细节例子源码

    在Android应用开发中,异步任务(AsyncTask)是一个常用工具,用于在后台线程执行耗时操作,然后在UI线程更新结果,避免阻塞用户界面。AsyncTask的使用和内部机制对于任何Android开发者来说都至关重要。让我们深入...

    Android的线程使用来更新UI

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

    Android AsyncTask 源码解析

    AsyncTask 是 Android 平台上一个非常重要的工具类,用于在后台线程执行耗时操作,然后在 UI 线程更新结果,从而避免了因长时间运行任务而导致的 ANR(Application Not Responding)错误。在深入探讨 AsyncTask 的...

    Android Handler AsyncTask 异步加载

    AsyncTask是Android提供的一种轻量级的异步执行框架,用于在后台执行计算密集型任务,然后在UI线程中更新结果。它有三个泛型参数,分别代表了输入类型、进度类型和输出类型。AsyncTask提供了`onPreExecute()`(任务...

    Android中异步类AsyncTask用法总结

    AsyncTask 是 Android 平台上一种轻量级的异步处理机制,主要用于在后台执行耗时操作,同时确保结果能够在主线程中安全地更新 UI。它简化了多线程编程,尤其是与用户界面交互的需求。 首先,AsyncTask 包含三个泛型...

    Android中AsyncTask的入门使用学习指南

    Android的AsyncTask是一个轻量级的异步任务框架,用于在后台线程执行耗时操作,并在主线程中更新UI。它是Android SDK提供的一种简化多线程编程的方式,尤其适用于进行短时间的、与用户界面交互紧密的任务。 ...

    Android_AsyncTask使用

    **AsyncTask** 是 Android 提供的一个用于在后台线程执行耗时操作并在 UI 线程更新结果的类。它简化了多线程编程的过程,使开发者无需手动管理线程和处理器就能轻松地在主线程上执行耗时的操作。 #### 二、...

    Android的AsyncTask异步任务

    在Android应用开发中,AsyncTask是一个非常重要的工具类,它为开发者提供了一种方便的机制来执行后台操作,同时能够在线程间进行数据交互,确保UI的流畅性。本篇文章将深入探讨Android的AsyncTask异步任务,以及如何...

    Android_AsyncTask_详解

    在 Android 开发中,为了保持应用程序的响应性,避免 UI 假死现象,`AsyncTask` 提供了一种简单的异步编程模型,允许开发者在后台线程中执行耗时任务,同时可以在 UI 线程中更新用户界面。 `AsyncTask` 的核心思想...

    Xamarin.Android 非UI线程更新UI

    在Xamarin.Android开发中,非UI线程更新UI是一个常见的需求,但同时也涉及到线程安全问题。本篇文章将深入探讨如何在Xamarin.Android环境中正确地从非UI线程(也称为后台线程)更新用户界面。 首先,我们需要理解...

    Android 线程AsyncTask逐步在list中加入条目

    `AsyncTask`是Android提供的一种轻量级的多线程解决方案,特别适用于更新UI的操作。在这个例子中,我们将深入探讨如何使用`AsyncTask`来动态地在ListView中添加条目。 首先,让我们理解`AsyncTask`的基本结构。`...

Global site tag (gtag.js) - Google Analytics