AsyncTask可以轻松容易的跟新UI,而开发者需要做的是在不同的回调函数中嵌入代码逻辑即可。关于Android中的线程相关内容,可以参考开发者网站:developer.android.com/guide/components/processes-and-threads.html
开发者网站对AsyncTask的说明已经很明确了,参考地址:http://developer.android.com/reference/android/os/AsyncTask.html,下面从代码角度看看实现过程:
- 继承AsyncTask,定义自己的异步任务;
- 在自定义AsyncTask中的回调函数中嵌入操作逻辑;
- 创建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哦!:)
相关推荐
本文将详细探讨如何在Android中使用`AsyncTask`来异步更新UI界面。 ### 一、AsyncTask概述 `AsyncTask`是Android SDK提供的一种轻量级的异步任务处理类,它简化了在后台线程中执行任务并在UI线程中更新结果的过程...
Android异步处理二:使用AsyncTask异步更新UI界面。
通过这个例子,我们可以看到在Fragment中使用Android的AsyncTask进行线程管理和UI更新的基本步骤。然而,随着Android版本的更新,推荐使用其他更现代的解决方案,如`LiveData`、`ViewModel`、`Coroutines`或`...
本资料包主要讲解了如何使用`AsyncTask`进行异步加载图片,这对于在UI线程中保持流畅用户体验至关重要。 `AsyncTask`是Android SDK中的一个类,它为开发者提供了简单的多线程和回调功能。它的核心思想是将长时间...
在Android应用开发中,AsyncTask是一个用于在后台线程执行耗时操作并更新UI的工具类,它是Android 1.5版本引入的。AsyncTask的设计初衷是为了简化异步编程,避免直接操作线程和Handler带来的复杂性。下面我们将详细...
通常,我们推荐使用Handler或AsyncTask来异步处理UI更新。在主线程(UI线程)中更新UI,确保操作的顺利进行。 5. **测试广播接收器**: 文件名为"testbroadcast"可能是一个用于测试广播接收器的类或项目。测试广播...
在Android开发中,异步...务必注意,随着Android版本的更新,`AsyncTask`逐渐暴露出一些问题,例如内存泄漏和并发问题。因此,在最新的Android开发中,推荐使用`LiveData`、`ViewModel`和`Worker`等现代异步处理框架。
`AsyncTask`是Android提供的一个轻量级的多线程框架,用于执行后台任务并更新UI。它简化了异步任务的实现过程,使得开发者无需手动管理线程生命周期,从而避免了复杂的线程同步问题。`AsyncTask`的设计基于泛型,有...
在Android应用开发中,异步任务(AsyncTask)是一个常用工具,用于在后台线程执行耗时操作,然后在UI线程更新结果,避免阻塞用户界面。AsyncTask的使用和内部机制对于任何Android开发者来说都至关重要。让我们深入...
下面将详细探讨Android线程的使用以及如何在后台线程中处理数据并更新UI。 1. 主线程与UI更新 主线程是Android应用的入口,负责处理所有与UI相关的事件,如触摸事件、键盘输入等。任何对UI的操作,包括添加、删除或...
AsyncTask 是 Android 平台上一个非常重要的工具类,用于在后台线程执行耗时操作,然后在 UI 线程更新结果,从而避免了因长时间运行任务而导致的 ANR(Application Not Responding)错误。在深入探讨 AsyncTask 的...
AsyncTask是Android提供的一种轻量级的异步执行框架,用于在后台执行计算密集型任务,然后在UI线程中更新结果。它有三个泛型参数,分别代表了输入类型、进度类型和输出类型。AsyncTask提供了`onPreExecute()`(任务...
AsyncTask 是 Android 平台上一种轻量级的异步处理机制,主要用于在后台执行耗时操作,同时确保结果能够在主线程中安全地更新 UI。它简化了多线程编程,尤其是与用户界面交互的需求。 首先,AsyncTask 包含三个泛型...
Android的AsyncTask是一个轻量级的异步任务框架,用于在后台线程执行耗时操作,并在主线程中更新UI。它是Android SDK提供的一种简化多线程编程的方式,尤其适用于进行短时间的、与用户界面交互紧密的任务。 ...
**AsyncTask** 是 Android 提供的一个用于在后台线程执行耗时操作并在 UI 线程更新结果的类。它简化了多线程编程的过程,使开发者无需手动管理线程和处理器就能轻松地在主线程上执行耗时的操作。 #### 二、...
在Android应用开发中,AsyncTask是一个非常重要的工具类,它为开发者提供了一种方便的机制来执行后台操作,同时能够在线程间进行数据交互,确保UI的流畅性。本篇文章将深入探讨Android的AsyncTask异步任务,以及如何...
在 Android 开发中,为了保持应用程序的响应性,避免 UI 假死现象,`AsyncTask` 提供了一种简单的异步编程模型,允许开发者在后台线程中执行耗时任务,同时可以在 UI 线程中更新用户界面。 `AsyncTask` 的核心思想...
在Xamarin.Android开发中,非UI线程更新UI是一个常见的需求,但同时也涉及到线程安全问题。本篇文章将深入探讨如何在Xamarin.Android环境中正确地从非UI线程(也称为后台线程)更新用户界面。 首先,我们需要理解...
`AsyncTask`是Android提供的一种轻量级的多线程解决方案,特别适用于更新UI的操作。在这个例子中,我们将深入探讨如何使用`AsyncTask`来动态地在ListView中添加条目。 首先,让我们理解`AsyncTask`的基本结构。`...