Android AsyncTask 异步任务

异步任务 AsyncTask

 

为了解决 新线程 不能更新 UI组件的问题, Android 提供了如下几种方法:


(1) Handler 实现线程之间的通信。
(2) Activity.runOnUiThread(Runnable);
(3) View.post(Runnalbe)
(4) View.postDelayed(Runnable ,long)
 
后三种要繁琐一些。 而异步任务则可以进一步简化这些操作。

AsyncTask <Params, Progress, Result> 三个泛型参数

Params: 启动任务执行的输入参数的类型。
Progress: 后台任务完成的进度值的类型。
Result: 后台任务完成后返回结果的类型。
如果没有参数的话可以写为 Void。
 
根据需要可以实现 AsyncTask 的不同方法
doInBackground()    重写该方法就是后台要完成的任务,该方法可以调用 publishProgress 方法来更新进度。
onProgressUpdate() 调用 publishProgress 时将会触发该方法。
onPreExecute()         在执行耗时任务前来调用,一般来做一些初始化工作,比如在界面上显示进度条。
onPostExcute()          当 doInBackground 执行完后会自动调用。并将返回值传给他。

使用步骤
1. 创建 AsyncTask 子类。
2. 选择实现 AsyncTask 的不同方法。
3. 调用子类的 execute() 方法开始执行耗时任务。

注意
必须在 UI 线程中创建 AsyncTask 实例。
必须在 UI 线程中调用 实例的 execute() 方法。
上述四个方法 不应该有程序员调用,而应该是由系统调用。
每个 AsyncTask 实例只能被执行一次,执行多次将会引发异常。

示例代码:
 
<span style="font-size:18px;">package com.serviatech.asynctasktest;

import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ProgressBar;

/** 利用异步任务来更新进度条 */
public class MainActivity extends Activity {

	private ProgressBar pb;

	private final int PB_MAX = 100;
	private final String TAG = "MainActivity";

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		pb = (ProgressBar) findViewById(R.id.pb);
		pb.setMax(PB_MAX);
	}

	public void startAsyncTask(View view) {

		MyAsyncTask myAsyncTask = new MyAsyncTask();
		myAsyncTask.execute(null, null, null);
	}

	private class MyAsyncTask extends AsyncTask<Void, Void, Void> {

		@Override
		protected Void doInBackground(Void... params) {
			// TODO Auto-generated method stub

			int count = 0;
			while (true) {

				Log.d(TAG, "--- count= " + count++ + " ---");
				try {
					Thread.sleep(60);
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				pb.setProgress(count);
				if (count == 100)
					break;
			}
			return null;
		}

	}
}
</span>


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值