展会信息港展会大全

Android菜鸟的成长笔记(13)——异步任务(Async Task)
来源:互联网   发布日期:2016-01-14 12:40:44   浏览:1413次  

导读:Android的UI线程主要负责处理用户的事件及图形显示,因此主线程UI不能阻塞,否则会弹出一个ANR(Application Not Responding)异常,所以不能在UI线程中执行耗时...

Android的UI线程主要负责处理用户的事件及图形显示,因此主线程UI不能阻塞,否则会弹出一个ANR(Application Not Responding)异常,所以不能在UI线程中执行耗时操作。AsyncTask是一个抽象类,通常被继承,继承时需要指定三个泛型:

AsyncTask

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;

@Override

protected 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{

ProgressDialog pdialog;

Context mContext;

int hasRead = 0;

public DownTask(Context ctx){

mContext = ctx;

}

/**

* 该方法在执行后台耗时操作前被调用,初始化

*/

@Override

protected 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)方法更新任务的执行进度。

*/

@Override

protected 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 block

e.printStackTrace();

return null;

}

}

/**

* 当doInBackground完成后,系统自动调用

*/

@Override

protected void onPostExecute(String result) {

//show.setText(result);

webView.loadDataWithBaseURL(null, result, "text/html", "utf-8", null);

pdialog.dismiss();

}

@Override

protected void onProgressUpdate(Integer... values) {

show.setText("已经读取了【" + values[0] + "】行!");

pdialog.setProgress(values[0]);

}

}

}

activity_main.xml

下载"

android:onClick="download"/>

运行结果:

赞助本站

人工智能实验室

相关热词: android开发 教程

AiLab云推荐
推荐内容
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港