异步task是一个线程,但是可以和ui主线程交互。
他可以传入参数,参数传入doInBackground(Integer... params)。doInBackground(Integer... params)的返回值作为result,传递给onPostExecute作为参数。doInBackground(Integer... params)方法中调用了 publishProgress(p)方法,在此方法调用后就会直接触发 protected void onProgressUpdate(Integer... progress),p作为参数传递给progress。
实例:
import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
public class AsyncTaskTest extends Activity {
TextView tv;
final String TAG="AsyncTaskTest";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tv = (TextView) findViewById(R.id.textView1);
new MyTask().execute(6, 12, 7);
}
class MyTask extends AsyncTask<Integer, Integer, Integer> {
//此方法是在调用doInBackground之前调用的,主要做一些准备工作,例如打开一个进度调对话框。
@Override
protected void onPreExecute() {
super.onPreExecute();
tv.setText("test");
Log.e(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>AsyncTaskTest", "onPreExecute()");
}
//这里是要在后台线程中做的事情,只要这一个方法是后台线程的,其余的方法都是操作前台的,所有的操作 都用于前台。
@Override
protected Integer doInBackground(Integer... params) {
Log.d(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>AsyncTaskTest", "doInBackground()");
int p = 0;
for (int index = 0; index < params.length; index++) {
int num = params[index];
for (int j = 0; j < num; j++) {
if (num - j <= 0) {
break;
}
p++;
publishProgress(p);
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
return p;
}
@Override
protected void onProgressUpdate(Integer... progress) {
Log.d(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>AsyncTaskTest", "onProgressUpdate()");
tv.append("\nProgress: " + progress[0]);
}
//doInBackground的return值是传入的result,是在doInBackground做完后执行的操作。
@Override
protected void onPostExecute(Integer result) {
Log.d(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>AsyncTaskTest", "onPostExecute()");
tv.append("\nFinished. Result: " + result);
}
@Override
protected void onCancelled() {
super.onCancelled();
Log.d(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>AsyncTaskTest", "onCancelled()");
}
}
}
分享到:
相关推荐
"Asynctask异步加载的使用"这一主题涵盖了如何利用Android SDK中的AsyncTask类来实现后台任务的执行,并在UI线程更新结果。以下是对这个知识点的详细讲解: AsyncTask是Android提供的一种轻量级的异步处理机制,...
在这个“一个AsyncTask异步任务的操作实例”中,我们将深入探讨AsyncTask的工作原理、使用方法以及如何在实际项目中应用。 1. **AsyncTask基本结构**: AsyncTask由三个泛型参数定义:`Params`, `Progress`, 和 `...
AsyncTask是Android平台提供的一种轻量级的异步任务处理机制,主要用来在后台执行耗时操作,并在完成时更新UI。它适用于那些不需要长时间运行的任务,如网络请求、图片下载等,避免阻塞主线程,提升用户体验。下面将...
`AsyncTask`是Android提供的一种轻量级的异步处理工具,特别适合用来进行短时间的后台操作,如网络请求、图片下载等。本示例将详细介绍如何使用`AsyncTask`来实现图片的异步下载。 首先,`AsyncTask`有三个泛型参数...
AsyncTask是Android提供的一种轻量级的异步处理框架,非常适合用来进行短时间、小规模的后台任务。本教程将深入探讨AsyncTask的使用方法,帮助初学者更好地理解和应用。 AsyncTask主要包含三个泛型参数:Params, ...
Android 的 UI 线程主要负责处理用户的按键事件、触屏事件等。...但由于新线程不允许直接更新山 I 组件,为了解决这个问题,Android 提供了异步任务 (AsyncTask) 的方式实现异步线程的操作。
private class MyTask extends AsyncTask, Void, String> { @Override protected void onPreExecute() { // 显示进度对话框或更新UI } @Override protected String doInBackground(String... urls) { try...
AsyncTask 是 Android 平台上一种轻量级的异步处理机制,主要用于在后台执行耗时操作,同时确保结果能够在主线程中安全地更新 UI。它简化了多线程编程,尤其是与用户界面交互的需求。 首先,AsyncTask 包含三个泛型...
`AsyncTask`是Android SDK提供的一种轻量级的异步处理机制,主要用于简化短时间的后台操作。这篇博文将深入探讨`AsyncTask`的工作原理和使用方法。 `AsyncTask`主要由四个关键部分组成:`onPreExecute()`、`...
AsyncTask是Android开发中用于处理轻量级异步任务的重要工具。它允许开发者在后台线程执行计算密集型操作,并在UI线程更新结果,从而避免阻塞主线程,提高应用的响应速度和用户体验。在Android系统中,由于主线程...
AsyncTask是为了简化异步任务而设计的,它能够帮助开发者在后台执行耗时操作,同时更新UI线程,避免了直接在主线程中进行耗时操作导致的ANR(Application Not Responding)错误。在本文中,我们将详细讨论如何在...
在Android应用开发中,异步任务(AsyncTask)是一个强大的工具,用于在后台线程执行耗时操作,然后在UI线程更新结果,避免了主线程(UI线程)因执行长时间运算而阻塞的问题。Android SDK提供的AsyncTask类使得开发者...
然而,对于Android的新版本(API级别23及以上),`AsyncTask`的性能和并发性有所下降,推荐使用`Executor`、`LiveData`或`ViewModel`结合`Coroutine`等更现代的异步处理方式。但`AsyncTask`对于理解Android多线程...
AsyncTask是Android SDK提供的一种轻量级异步处理框架,适用于简单且快速的任务。下面将详细解释AsyncTask的工作原理和使用方法。 **AsyncTask概述** AsyncTask是Android中的一个抽象类,用于在后台线程执行任务,...
class MyTask extends AsyncTask, Integer, String> {} ``` 这里,`String`是传递给后台任务的方法参数类型,`Integer`是进度更新的类型,而`String`则是最终结果的类型。 #### 二、AsyncTask的基本使用流程 使用...
在Android开发中,异步任务(AsyncTask)是一种常见的用于执行后台操作的工具,它能够帮助开发者在主线程中更新UI,避免了由于长时间运行任务而导致的ANR(Application Not Responding)错误。本篇文章将深入探讨...
在C# 5.0及更高版本中,`Task`, `Await` 和 `Async` 关键字是异步编程的核心工具,它们极大地简化了多线程和非阻塞操作的处理,尤其对于UI应用程序如WinForm,能确保用户体验的流畅性。本示例通过一个简单的WinForm...
public class MyTask extends AsyncTask, Integer, String> { @Override protected String doInBackground(String... params) { // 在后台线程执行耗时操作 return "Result"; } @Override protected void ...