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);

}

}

}

--------------------------------------------结果----------------------------------------------------

<!--EndFragment-->