ch031 Android AsyncTask
--------------------------------------------AndroidManifest.xml---------------------------------
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.ch31"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="10"
android:targetSdkVersion="15" />
<!-- sdcard读写权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!-- sdcard创建目录与文件权限 -->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<!-- 网络访问权限 -->
<uses-permission android:name="android.permission.INTERNET" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/title_activity_main" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
--------------------------------------------MainActivity.java-------------------------------------
package com.ch31;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import android.app.Activity;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Environment;
/**
*
* 项目名称:com.ch31
* 类名称:MainActivity
* 类描述: 异步任务=handler+thread
* 创建人:方勇
* 创建时间:2012-12-26 上午11:48:02
* Copyright (c) 方勇-版权所有
*/
public class MainActivity extends Activity {
/* 目录/mnt/sdcard */
private File rootDie;
/* 输出文件名称 */
private String outFileName = "a07.rar";
/*进度条对话框*/
private ProgressDialog pdialog;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
/* 检查sdcard并创建目录文件 */
checkAndCreateDir();
/* 异步下载 */
new MyAdyncTask().execute("http://192.168.4.134:8080/tool.rar");
}
@Override
protected Dialog onCreateDialog(int id) {
/*实例化进度条对话框*/
pdialog = new ProgressDialog(this);
/*进度条对话框属性设置*/
pdialog.setMessage("download.....");
pdialog.setMax(100);
pdialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
pdialog.setIndeterminate(false);//无限循环模式
pdialog.setCancelable(true);//可取消
/*显示对话框*/
pdialog.show();
return pdialog;
}
private void checkAndCreateDir() {
/* 获取sdcard目录/mnt/sdcard */
rootDie = Environment.getExternalStorageDirectory();
/* 新文件的目录 */
File newFile = new File(rootDie + "/mydownload1/");
if (!newFile.exists()) {
/* 创建目录 */
newFile.mkdirs();
}
}
/*异步任务,后台处理与更新UI*/
class MyAdyncTask extends AsyncTask<String, String, String> {
/* 后台线程 */
@Override
protected String doInBackground(String... params) {
/*URL*/
try {
URL url = new URL(params[0]);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
/*URL属性设置*/
conn.setRequestMethod("GET");
/*URL建立连接*/
conn.connect();
//conn.setDoInput(true);
/*下载文件的大小*/
int fileOfLength = conn.getContentLength();
/*每次下载的大小与总下载的大小*/
int totallength = 0;
int length = 0;
/*输入流*/
InputStream in = conn.getInputStream();
/*输出流*/
FileOutputStream out = new FileOutputStream(new File(rootDie+"/mydownload1/",outFileName));
/*缓存模式,下载文件*/
byte[] buff = new byte[1024*1024];
while((length = in.read(buff))>0){
totallength+=length;
String str1 = ""+(int)((totallength*100)/fileOfLength);
//publishProgress(new String[]{str1,"aa","bb"});
publishProgress(str1);
out.write(buff,0,length);
}
/*关闭输入输出流*/
in.close();
out.flush();
out.close();
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
/*预处理UI线程*/
@Override
protected void onPreExecute() {
showDialog(0);
super.onPreExecute();
}
/*结束时的UI线程*/
@Override
protected void onPostExecute(String result) {
dismissDialog(0);
super.onPostExecute(result);
}
/*处理UI线程,会被多次调用,触发事件为publicProgress方法*/
@Override
protected void onProgressUpdate(String... values) {
//System.out.println(values[1]);
pdialog.setProgress(Integer.parseInt(values[0]));
//super.onProgressUpdate(values);
}
}
}
--------------------------------------------结果----------------------------------------------------