`

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-->
  • 大小: 86.5 KB
分享到:
评论

相关推荐

    CH341 Android代码

    9. **异步编程**:由于Android应用的主线程不允许执行耗时操作,因此会使用到AsyncTask、IntentService、Handler、RxJava等异步处理机制。 10. **Gradle构建系统**:Android项目使用Gradle进行构建,管理依赖和打包...

    Android SDK开发范例大全(第二版)CH05.rar

    5. **异步操作**:Android中的AsyncTask、Handler、Looper以及IntentService等机制,用于处理耗时操作,防止阻塞主线程。这些异步技术的使用方法和最佳实践可能在本章中有所阐述。 6. **BroadcastReceiver**:广播...

    android ophone开发完全讲义源码ch14

    《Android OPhone开发完全讲义源码Ch14》是一份深入探讨Android OPhone平台开发的教程资料,其中包含了第14章的源代码。在这一章节中,开发者将了解到如何利用Android SDK和OPhone特有的功能来构建高效、功能丰富的...

    google.android.sdk开发范例大全.源码ch2-ch6

    8. **AsyncTask**:在Android中,异步任务是处理耗时操作(如网络请求、数据库操作)的常用方式,避免阻塞主线程。源码可能包含使用AsyncTask的实例。 9. **Fragment**:从Android 3.0开始引入,Fragment允许在单个...

    android SDK范例开发大全 第3版 源代码 CH3

    还可能包含对Android的异步处理机制的理解,比如AsyncTask和IntentService。在Android中,避免在主线程执行耗时操作是提高用户体验的关键。因此,了解如何正确使用这些异步机制对于编写流畅的应用至关重要。 网络...

    android SDK范例开发大全 第3版 源代码 CH8

    《Android SDK范例开发大全 第3版 源代码 CH8》是一本专注于Android应用程序开发的实战指南,其中包含了丰富的示例代码,旨在帮助开发者深入理解Android SDK的各种功能和使用方法。这部分源代码对应的是书中的第八章...

    android开发权威指南(第二版)源代码

    - AsyncTask:Android提供的轻量级异步任务处理类,适合短时间、不耗时的任务。 - Handler/Looper/Messenger:用于处理主线程和子线程之间的消息通信,实现UI更新。 8. **权限管理** (可能在相关章节) - Android...

    《Android/OPhone开发完全讲义》一书的所有源代码

    6. **高级特性**:ch24和ch25可能涉及更高级的Android开发话题,如多线程处理,使用AsyncTask或IntentService,或者是关于通知、权限管理、动画效果以及Material Design设计原则的应用。 通过这些源代码,读者不仅...

    Android开发权威指南(源代码ch03)

    在本章“ch03”中,我们将探索Android应用的基础架构,包括Activity、Intent、BroadcastReceiver以及Service等核心组件。这些组件构成了Android应用的核心功能,理解和掌握它们对于任何Android开发者来说都是至关...

    Android SDK开发范例大全source_CH04

    综上所述,"Android SDK开发范例大全source_CH04"包含的内容广泛,涉及了Android开发的诸多核心技术和最佳实践。通过学习并实践这些示例,开发者可以提升自己的Android开发技能,更好地理解和运用Android SDK。

    android ophone开发完全讲义源码ch06

    此外,Android的AsyncTask或者LiveData可以处理网络操作与UI更新的异步问题。了解JSON或其他数据格式的解析也是必要的。 6. **权限管理**: Android Ophone中,应用需要声明并获取相应的权限才能访问某些资源或...

    Android ophone开发完全讲义源码ch09-12

    《Android Ophone开发完全讲义源码:深入理解ch09-12》 在Android应用开发领域,尤其是针对Ophone平台的开发,深入理解源码是提升技能的关键。本讲义聚焦于ch09至ch12的核心知识点,旨在帮助开发者更全面地了解...

    Google.Android.SDK开发范例大全.第3版源码_CH06部分

    8. **AsyncTask和线程管理**:在Android中,由于UI线程不能进行耗时操作,因此需要使用AsyncTask或其他线程管理工具。这部分源码可能会展示如何在后台线程执行任务,然后在主线程更新UI。 9. **数据存储**:Android...

    Android代码-AndroidLife

    AndroidLife The Android's life is very interesting and rich. 1. ImageScaleTypesActivity Introduce the ImageView scale properties 介绍ImageView scale属性 Detailed introduction Screenshot: 2....

    android ophone开发完全讲义源码ch04

    《Android OPhone开发完全讲义源码Ch04》是一份深入探讨Android OPhone平台开发的教程资料,其中包含了第四章的源代码。这一章节主要聚焦于Android应用程序的架构、UI设计以及与设备硬件交互的基础知识。在Android ...

    Android SDK开发范例大全(第二版)CH06.rar

    《Android SDK开发范例大全(第二版)CH06》是一个关于Android开发的章节资源,主要聚焦于SDK的使用和实战技巧。这个压缩包可能包含了该章节的所有代码示例、讲解文档和其他相关材料,帮助开发者深入理解Android应用...

    Android SDK开发范例大全(第二版)CH03.rar

    《Android SDK开发范例大全(第二版)CH03》是针对Android应用程序开发的一本详尽教程,由清华大学出版社出版。这本书的第三章涵盖了Android SDK中的关键知识点,旨在帮助开发者深入理解和实践Android应用的构建过程。...

    android SDK范例开发大全 第3版 源代码 CH4

    在CH04这个目录下,我们可以预期找到与第四章内容相关的源码,这通常会涵盖以下关键知识点: 1. **活动(Activity)管理**:Activity是Android应用的基本构建块,用于展示用户界面。源码可能会包含如何创建、启动、...

    Android App开发入门范例程序

    1. **Ch01 - Android基础** - Android系统架构:了解Android系统的层次,包括Linux内核、硬件抽象层、运行时库、应用程序框架和应用程序。 - Android Studio:Android的官方集成开发环境(IDE),包括项目创建、...

    AsyncTask演示Demo

    AsyncTask是Android开发中用于处理轻量级异步任务的重要工具。它允许开发者在后台线程执行耗时操作,然后在UI线程更新结果,从而避免了主线程被阻塞导致应用无响应的问题。本Demo主要展示了AsyncTask的用法和生命...

Global site tag (gtag.js) - Google Analytics