`

异步操作类AsyncTask(11)

阅读更多

                          消息机制我们已经用的足够熟练了,但是还是觉得美中不足的是就是子线程不能在

主线程UI更新,这样就带来了很多不方便,有没有可以解决这一麻烦的方法呢,有,这里介绍一个异步操作类

AsyncTask

AsyncTask,是android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作,提供接口反馈当前异步执行的程度(可以通过接口实现UI进度更新),最后反馈执行的结果给UI主线程.

使用的优点:

简单,快捷

过程可控      

使用的缺点:

在使用多个异步操作和并需要进行Ui变更时,难度加大

AsyncTask定义了三种泛型类型 Params,Progress和Result。

    • Params 启动任务执行的输入参数,比如HTTP请求的URL。
    • Progress 后台任务执行的百分比。
    • Result 后台执行任务最终返回的结果,比如String。
  • doInBackground(Params…) 后台执行,比较耗时的操作都可以放在这里。注意这里不能直接操作UI。此方法在后台线程执行,完成任务的主要工作,通常需要较长的时间。在执行过程中可以调用publicProgress(Progress…)来更新任务的进度。
  • onPostExecute(Result)  相当于Handler 处理UI的方式,在这里面可以使用在doInBackground 得到的结果处理操作UI。 此方法在主线程执行,任务执行的结果作为此方法的参数返回
  • 有必要的话你还得重写以下这三个方法,但不是必须的:

    • onProgressUpdate(Progress…)   可以使用进度条增加用户体验度。 此方法在主线程执行,用于显示任务执行的进度。
    • onPreExecute()        这里是最终用户调用Excute时的接口,当任务执行之前开始调用此方法,可以在这里显示进度对话框。
    • onCancelled()             用户调用取消时,要做的操作

    使用AsyncTask类,以下是几条必须遵守的准则:

    • Task的实例必须在UI thread中创建;
    • execute方法必须在UI thread中调用;
    • 不要手动的调用onPreExecute(), onPostExecute(Result),doInBackground(Params...), onProgressUpdate(Progress...)这几个方法;
    • 该task只能被执行一次,否则多次调用时将会出现异常;

现在我们使用进度条来实现子线程对主线程UI实时更新

主布局函数:

  <ProgressBar
        android:id="@+id/bar"
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

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

 Activity

代码:

public class MainActivity extends Activity {

	private TextView info=null;
	private ProgressBar bar=null;
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		this.info=(TextView)super.findViewById(R.id.info);
		this.bar=(ProgressBar)super.findViewById(R.id.bar);
		ChildUpdate child=new ChildUpdate();
		child.execute(100);//休眠时间
		
	}

	private class ChildUpdate extends AsyncTask<Integer,Integer,String>{
		
		protected void onPostExecute(String result){
			MainActivity.this.info.setText(result);//程序执行完毕
		}

		protected void onProgressUpdate(Integer...progress){//每次程序更新之后的数据
			MainActivity.this.info.setText("当前进度为:"+String.valueOf(progress[0]));
			
		}
		
		
		protected String doInBackground(Integer...params) {
			// TODO Auto-generated method stub
			for(int i=0;i<100;i++){
				MainActivity.this.bar.setProgress(i);
				this.publishProgress(i);//及时更新
				
				try {
					Thread.sleep(100);//每0.1秒增长
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				
			}
			return "完毕";
			
		}
		
	}
}

 实现效果如下:



 

  • 大小: 7 KB
0
1
分享到:
评论

相关推荐

    异步操作类AsyncTask

    在Android开发中,异步操作是必不可少的一部分,它允许开发者在后台线程执行耗时任务,以避免阻塞主线程并提升用户体验。`AsyncTask`是Android SDK提供的一种轻量级的异步处理机制,主要用于简化短时间的后台操作。...

    Android中异步类AsyncTask用法总结

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

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

    总的来说,`AsyncTask`是Android中实现简单异步操作的有效工具,特别是对于轻量级的网络请求和计算任务。然而,对于更复杂的多线程需求,如大量的并发任务或复杂的任务协调,开发者可能需要考虑使用`IntentService`...

    Android最全最简单的异步任务AsyncTask使用解析

    在实际使用中,可以使用AsyncTask来实现各种异步任务,例如网络请求、数据库操作、图片处理等。例如,在一个Activity中,点击按钮时,可以使用AsyncTask来执行耗时的操作,例如下载文件或请求网络数据。 以下是一个...

    Android中使用ListView数据异步加载与AsyncTask

    AsyncTask是Android提供的轻量级异步任务框架,用于在后台执行耗时操作,然后在UI线程更新结果。AsyncTask包含三个泛型参数:Params, Progress, Result,分别代表输入参数类型、进度类型和返回结果类型。其执行流程...

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

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

    Android AsyncTask异步处理下载网页

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

    Android 异步任务AsyncTask

    在Android应用开发中,异步任务(AsyncTask)是一个强大的工具,用于在后台线程执行耗时操作,然后在UI线程更新结果,避免了主线程(UI线程)因执行长时间运算而阻塞的问题。Android SDK提供的AsyncTask类使得开发者...

    Android 使用AsyncTask异步更新UI界面

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

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

    3. **解析**:在此示例中,我们首先定义了一个名为`LoadDataTask`的`AsyncTask`子类,该类的三个泛型参数分别是`Void`、`Void`和`List&lt;String&gt;`。`Void`表示没有输入参数和进度更新,`List&lt;String&gt;`则表示后台任务的...

    AsyncTask异步加载图片

    总的来说,`AsyncTask`是Android平台上的一个强大工具,能够帮助开发者轻松地实现异步操作,避免UI线程阻塞,提高应用的响应速度和用户体验。然而,对于大量或者复杂的异步任务,可能需要考虑使用更高级的解决方案,...

    android较轻级异步任务AsyncTask

    在Android开发中,异步操作是必不可少的一部分,用于在后台执行耗时操作,不阻塞用户界面。`AsyncTask`是Android提供的一种轻量级的异步处理机制,专为短时间、简单背景任务设计。本文将深入探讨`AsyncTask`的工作...

    异步加载 AsyncTask 简单的

    params)`:这是异步操作的核心部分,它在后台线程中执行,可以进行耗时操作。传入的`Params`参数可以在方法内部使用,而返回的`Result`将传递给`onPostExecute()`。 3. `onProgressUpdate(Progress... values)`:当...

    AsyncTask异步任务三.rar

    在Android应用开发中,异步任务(AsyncTask)是一个非常重要的组件,主要用于处理那些需要在后台线程执行但又需要与UI交互的操作。AsyncTask使开发者能够轻松地在后台线程执行耗时操作,然后在主线程更新UI,避免了...

    Android异步任务AsyncTask的简单DEMO

    AsyncTask是Android中的一个抽象类,用于在后台线程执行任务,同时允许在UI线程更新进度和结果。它的设计目的是简化与UI交互的多线程编程,包含三个泛型参数:Params, Progress, Result,分别代表输入参数类型、进度...

    异步AsyncTask状态监控

    Android API 11以上,AsyncTask的执行是在一个序列化的线程池中,而在早期版本,每个任务都会创建一个新的线程。因此,在不同版本的设备上,需要考虑执行效率和资源消耗。 8. **限制与最佳实践** 避免在循环或...

    异步加载AsyncTask的使用

    AsyncTask是Android SDK提供的一种轻量级的异步处理类,适用于进行简单的后台任务处理,例如网络请求、数据库操作等。本文件主要探讨了如何使用AsyncTask来实现异步加载,并提供了两个版本的示例,特别是第二个版本...

    Android Handler AsyncTask 异步加载

    1. 创建一个继承自AsyncTask的类,并定义`doInBackground()`方法。 2. 在`doInBackground()`中执行耗时操作。 3. 在`onPreExecute()`中可以做一些准备工作,如显示进度条。 4. `doInBackground()`执行完成后,调用`...

    异步任务Asynctask源码与反编译对比

    在Android开发中,异步任务(AsyncTask)是一种常见的用于执行后台操作的工具,它能够帮助开发者在主线程中更新UI,避免了由于长时间运行任务而导致的ANR(Application Not Responding)错误。本篇文章将深入探讨...

Global site tag (gtag.js) - Google Analytics