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

Android 如何把AsyncTask改用非内部类Android 如何把AsyncTask改用非内部类

阅读更多

Android 中我们使用AsyncTask时,一般是把它当Activity的内部类来使用的。原因,这样可以简单的在更新进度onProgressUpdate 和 执行完成时onPostExecute, 直接操作Activity的界面元素控件。但是如果我们想让我们的代码职责更单一,功能划分更清晰,就最好不要用内部类,这时候我们可以借用 Handler 来实现这个需求。

有关 AsyncTask 的用法可以参看我写的这篇博客: http://www.cnblogs.com/ghj1976/archive/2011/05/06/2039204.html

上面就是把 AsyncTask 当作Activity的内部类来使用的。

下面是一个例子,AsyncTask 的子类和 AsyncTask的子类是并行的。

首先是布局文件: main.xml

这里有两个控件,一个是进度条,一个是文本框,这两个在更新进度时都将被更新:

xml version="1.0" encoding="utf-8"?>

<
LinearLayout
 xmlns
:android
="http://schemas.android.com/apk/res/android"

	android
:orientation
="vertical"
 android
:layout_width
="fill_parent"

	android
:layout_height
="fill_parent"
>

	<
ProgressBar
 android
:id
="@+id/progress_bar"

		android
:layout_width
="200dip"
 android
:layout_height
="200dip"

		android
:layout_gravity
="center"
 android
:max
="100"
 android
:progress
="0"
>

	ProgressBar
>

	<
TextView
 android
:text
="TextView"
 android
:id
="@+id/textView1"

		android
:layout_width
="wrap_content"
 android
:layout_height
="wrap_content"
>
TextView
>

LinearLayout
>





AsyncTask 的子类: AsyncLoader, 注意这里的构造函数, 这是这里的关键之一。

package
 ghj1976.AsyncTask;

import
 android.os.AsyncTask;
import
 android.os.Handler;

// 设置三种类型参数分别为 Params = Void, Progress = Integer,Result = Void

public
 class
 AsyncLoader extends
 AsyncTask {

	private
 Handler handler = null
;

	public
 AsyncLoader(Handler h) {
		this
.handler = h;
	}

	@Override
	protected
 Void doInBackground(Void... params) {
		publishProgress(10);
		try
 {
			Thread.sleep(2000);
		} catch
 (InterruptedException e) {
			e.printStackTrace();
		}
		publishProgress(50);
		try
 {
			Thread.sleep(3000);
		} catch
 (InterruptedException e) {
			e.printStackTrace();
		}
		publishProgress(100);
		return
 null
;
	}

	@Override
	protected
 void
 onPostExecute(Void v) {
		this
.handler.sendEmptyMessage(0);
	}

	@Override
	protected
 void
 onProgressUpdate(Integer... values) {
		this
.handler.sendEmptyMessage(values[0]);
	}

}

AsyncTaskActivity 代码:

package
 ghj1976.AsyncTask;

import
 android.app.Activity;
import
 android.os.Bundle;
import
 android.os.Handler;
import
 android.os.Message;
import
 android.view.View;
import
 android.widget.ProgressBar;
import
 android.widget.TextView;

public
 class
 AsyncTaskActivity extends
 Activity {

	public
 ProgressBar pBar;

	private
 TextView tv;

	// 主线程的 handler

	private
 Handler handler = new
 Handler() {
		public
 void
 handleMessage(Message msg) {

			tv.setText(msg.what + " 
");
			if
 (msg.what <= 0) {
				pBar.setVisibility(View.INVISIBLE);
			} else
 {
				pBar.setProgress(msg.what);
			}
		}
	};

	@Override
	public
 void
 onCreate(Bundle savedInstanceState) {
		super
.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		tv = (TextView) findViewById(R.id.textView1);
		tv.setText("准备开始
");

		pBar = (ProgressBar) findViewById(R.id.progress_bar);

		// AsyncTask.execute()要在主线程里调用

		new
 AsyncLoader(handler).execute((Void) null
);
	}

}
0
0
分享到:
评论

相关推荐

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

    `AsyncTask`是Android SDK中的一个类,它为开发者提供了简单的多线程和回调功能。它的核心思想是将长时间运行的任务放到后台线程,而将结果更新到主线程,这样可以避免主线程(UI线程)阻塞,提高应用的响应速度。`...

    android中AsyncTask的用法

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

    Android AsyncTask 源码解析

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

    Android中异步类AsyncTask用法总结

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

    Android 使用AsyncTask异步更新UI界面

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

    Android Handler AsyncTask 异步加载

    在Android应用开发中,Handler、AsyncTask和异步加载是三个关键的概念,它们主要用于解决UI线程阻塞问题,提高应用程序的响应速度和用户体验。下面将详细解释这三个概念及其相互关系。 **Handler(处理器)** ...

    Android AsyncTask Demo 自己参考网络写的学习 demo

    - 由于AsyncTask内部维护了一个线程池,大量并发的AsyncTask可能导致性能问题,因此不建议大量使用。 6. **文件结构分析** - `gradlew.bat`和`gradlew`:Gradle wrapper,用于在没有Gradle安装的情况下运行构建。...

    Pro Android学习:AsyncTask小例子

    这是Pro Android学习系列中AsyncTask部分的例子源代码。相关学习笔记见:http://blog.csdn.net/flowingflying/article/details/6212512

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

    1. 创建一个继承自`AsyncTask`的类,例如`LoadDataTask`,并定义所需的泛型参数。 2. 在`onPreExecute()`中,可能需要初始化ListView和Adapter,并显示一个加载提示。 3. `doInBackground()`中,模拟数据生成过程,...

    Android的AsyncTask异步任务

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

    android AsyncTask 断点下载实例

    在Android开发中,AsyncTask是一种常用的工具类,用于在后台线程执行耗时操作,同时在UI线程更新进度或结果。本实例将探讨如何利用AsyncTask实现断点下载功能,这是一种允许用户在暂停后继续下载大文件的技术,极大...

    在Android中使用AsyncTask和Handler线程间交互的方式

    在Android中使用AsyncTask和Handler线程间交互的方式,详情参见博客:http://www.cnblogs.com/plokmju/p/android_AsyncTask.html和http://www.cnblogs.com/plokmju/p/android_Handler.html

    Android AsyncTask异步处理下载网页

    在使用`AsyncTask`处理网页下载时,首先创建一个继承自`AsyncTask`的类,然后重写上述方法。下面是一个基本示例: ```java public class DownloadWebPageTask extends AsyncTask, Void, String&gt; { @Override ...

    Android异步操作实例源码----AsyncTask类

    以从网上下载图片为例,讲解Android自带的异步操作类----AsyncTask类的用法 public class DownloadPicture extends AsyncTask, Integer, Bitmap&gt; 其中包含三个异步操作类可供测试

    Android用AsyncTask异步加载图片(新)

    `AsyncTask`是Android提供的一种轻量级的多线程解决方案,它允许开发者在后台执行耗时操作,并在主线程中更新UI,避免了UI阻塞。本篇文章将深入探讨如何在Android中使用`AsyncTask`来异步加载网络图片。 首先,我们...

    详解Android中AsyncTask的使用

    详解Android中AsyncTask的使用。

    Android_AsyncTask_详解

    ### Android AsyncTask 详解 #### 一、AsyncTask 概述 `AsyncTask` 是 Android 提供的一个用于执行后台任务的轻量级框架。它能够帮助开发者轻松地在后台线程执行耗时的操作,并且更新 UI 界面而无需直接操作线程和...

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

    AsyncTask的使用和内部机制对于任何Android开发者来说都至关重要。让我们深入探讨这个话题。 首先,Android系统为了解决长时间运行的任务在主线程执行导致的UI冻结问题,提供了AsyncTask。AsyncTask分为三个基本...

    Android开发AsyncTask异步处理任务

    在Android应用开发中,AsyncTask是一个非常重要的工具类,它为开发者提供了在UI线程之外执行耗时操作的能力,从而避免了主线程被阻塞导致的ANR(Application Not Responding)错误。这个博文主要围绕Android开发中的...

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

    - **内存泄漏**:如果Activity持有AsyncTask的引用,而AsyncTask内部又持有Activity的引用,会导致Activity无法正常销毁,从而引发内存泄漏。解决方法是在不需要时取消任务或使用弱引用。 - **序列化执行**:默认...

Global site tag (gtag.js) - Google Analytics