原文: [置顶] Android菜鸟的成长笔记(13)——异步任务(Async Task)

Android的UI线程主要负责处理用户的事件及图形显示,因此主线程UI不能阻塞,否则会弹出一个ANR(Application Not Responding)异常,所以不能在UI线程中执行耗时操作。AsyncTask<>是一个抽象类,通常被继承,继承时需要指定三个泛型: AsyncTask<Params, Progress, Result> Params:启动任务执行的输入参数的类型 Progress:后台任务完成的进度值的类型 Result:后台执行任务完成后返回结果的类型 例子:从http://m.blog.csdn.net/blog/lxq_xsyu异步加载数据到手机上并显示(详细请看注释) MainActivity.java
package com.example.testasyntask;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.net.MalformedURLException;import java.net.URL;import java.net.URLConnection;import android.app.Activity;import android.app.ProgressDialog;import android.content.Context;import android.os.AsyncTask;import android.os.Bundle;import android.view.View;import android.webkit.WebView;import android.widget.TextView;public class MainActivity extends Activity {private TextView show;private WebView webView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);show = (TextView) findViewById(R.id.textView1);webView = (WebView) findViewById(R.id.webview);}public void download(View source) throws MalformedURLException{DownTask task = new DownTask(this);task.execute(new URL("http://m.blog.csdn.net/blog/lxq_xsyu"));}class DownTask extends AsyncTask<URL, Integer, String>{ProgressDialog pdialog;Context mContext;int hasRead = 0;public DownTask(Context ctx){mContext = ctx;}/** * 该方法在执行后台耗时操作前被调用,初始化 */@Overrideprotected void onPreExecute() {pdialog = new ProgressDialog(mContext);pdialog.setTitle("任务正在执行中");pdialog.setMessage("任务正在执行中,请耐心等待...");pdialog.setCancelable(false);pdialog.setMax(182);pdialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);pdialog.setIndeterminate(false);pdialog.show();}/** * 重写该方法就是后台线程将要完成的任务,该方法可以调用 * publishProgress(Progress.. values)方法更新任务的执行进度。 */@Overrideprotected String doInBackground(URL... params) {StringBuilder sb = new StringBuilder();try {URLConnection conn = params[0].openConnection();BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream(), "utf-8"));String line = null;while((line = br.readLine()) != null){sb.append(line + "\n");hasRead++;publishProgress(hasRead);}return sb.toString();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();return null;}}/** * 当doInBackground完成后,系统自动调用 */@Overrideprotected void onPostExecute(String result) {//show.setText(result);webView.loadDataWithBaseURL(null, result, "text/html", "utf-8", null);pdialog.dismiss();}@Overrideprotected void onProgressUpdate(Integer... values) {show.setText("已经读取了【" + values[0] + "】行!");pdialog.setProgress(values[0]);}}}
activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    android:orientation="vertical"    android:gravity="center_horizontal">        <TextView        android:id="@+id/textView1"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_marginTop="102dp"        android:text="TextView" /> <Button        android:id="@+id/button1"        android:layout_width="wrap_content"        android:layout_height="wrap_content"         android:layout_marginBottom="31dp"        android:text="开始下载"         android:onClick="download"/>    <WebView         android:id="@+id/webview"        android:layout_width="match_parent"        android:layout_height="wrap_content"/></LinearLayout>
运行结果: Android菜鸟的成长笔记(13)——异步任务(Async Task) Android菜鸟的成长笔记(13)——异步任务(Async Task)


更多相关文章

  1. [android 多线程]一些帖子与文章ProgressDialog, AsyncTask, Thr
  2. Android中进程与进程、线程与线程之间如何通信?
  3. Android之Handler非主线程更新UI
  4. Android中的多进程、多线程
  5. Android 高性能编码一:多线程并发或分布式提高TPS
  6. Android Asynchronous Http Client - 开源http 多线程引擎
  7. 菜鸟学Android开发系列之:TextView属性补充

随机推荐

  1. Android人脸识别app——基于Face++,MVP+Re
  2. [Android] ListView (普通列表控件) 的基
  3. Android自学笔记-3-ADB的常用命令
  4. 一、android集成百度地图(android百度地
  5. Android 广播监听网络状态
  6. 普通android工程转换为C/C++工程之后,再还
  7. Android存储路径解析
  8. Android将转为闭源模式么?
  9. 快速Android开发系列通信篇之EventBus
  10. 鸿洋大神2016年所有文章链接