Android多线程下载

来源:互联网 发布:java短信群发源码 编辑:程序博客网 时间:2024/05/01 16:25

android的应用程序支持多线程,多线程编程为我们充分利用系统资源提供了便利,同时也为设计复杂UI和耗时操作提供了途径,提升了安卓用户的使用体验。

废话不多说,直接上源码

package com.android.downloader;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.os.Looper;import android.util.Log;import android.view.MotionEvent;import android.widget.Toast;import com.download.apk.DownloadManager.CallBack;/** * 多线程下载任务 *  * @author Michael ku *  *         2014-11-18下午3:00:57 */public class MainActivity extends Activity implements CallBack, Runnable {public boolean onTouchEvent(MotionEvent event) {super.onTouchEvent(event);if (event.getAction() == MotionEvent.ACTION_DOWN) {test();return true;}return false;}private void test() {if (!isStarting) {new Thread(this).start();}}public void downLoadOver(String filePath) {System.out.println("filePath=" + filePath);}private File file;boolean isStarting = false;public void run() {Looper.prepare();final String fileName = "gg.apk";file = new File("sdcard" + File.separator + "android" + File.separator+ fileName);String path = "http://gdown.baidu.com/data/wisegame/ea7bf48f2e9dff9d/shoujiguanjia_1009.apk";try {URL url = new URL(path);try {HttpURLConnection conn = (HttpURLConnection) url.openConnection();InputStream is = conn.getInputStream();FileOutputStream fos = new FileOutputStream(file);byte[] buf = new byte[256];conn.connect();double count = 0;if (conn.getResponseCode() >= 400) {Toast.makeText(MainActivity.this, "连接超时",Toast.LENGTH_SHORT).show();Log.i("Michael", "time exceed");} else {while (count <= 100) {if (is != null) {int numRead = is.read(buf);if (numRead <= 0) {break;} else {fos.write(buf, 0, numRead);}} else {break;}}}conn.disconnect();fos.close();is.close();isStarting = true;} catch (IOException e) {e.printStackTrace();isStarting = false;}} catch (MalformedURLException e) {e.printStackTrace();isStarting = false;} finally {Log.e("Michael", "game over");Looper.loop();}}}// end


0 0