package com.ldci.asynctask;
import java.util.ArrayList;
import java.util.Hashtable;
import java.util.List;
import java.util.Map;
import android.app.ListActivity;
import android.content.Context;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView;
public class AsyncTaskActivity extends ListActivity
{
/** 用来存放每一个正在进行的下载任务 */
public static List<Map<String, Async>> listTask = new ArrayList<Map<String, Async>>();
private static List<Button> listStart = new ArrayList<Button>();
private static List<Button> listStop = new ArrayList<Button>();
private static List<Button> listPause = new ArrayList<Button>();
private static List<Button> listContinue = new ArrayList<Button>();
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
ListAdapter adapter = new ListAdapter(this);
setListAdapter(adapter);
getListView().setFocusable(false);
}
//=======================================================
private class ListAdapter extends BaseAdapter implements OnClickListener
{
private Context context = null;
public ListAdapter(Context context)
{
this.context = context;
}
@Override
public int getCount()
{
return Utils.title.length;
}
@Override
public Object getItem(int position)
{
return position;
}
@Override
public long getItemId(int id)
{
return id;
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
if(convertView==null)
{
convertView = View.inflate(this.context, R.layout.list_item, null);
}
TextView txt_title = (TextView)convertView.findViewById(R.id.txt);
ProgressBar pb_progressBar = (ProgressBar)convertView.findViewById(R.id.progressBar);
Button btn_start = (Button)convertView.findViewById(R.id.btn_start);
Button btn_pause = (Button)convertView.findViewById(R.id.btn_pause);
Button btn_stop = (Button)convertView.findViewById(R.id.btn_stop);
Button btn_continue = (Button)convertView.findViewById(R.id.btn_continue);
// 给统一列表项的下载、停止、暂停、继续、进度条控件设置相同的Tag
btn_start.setTag(String.valueOf(position));
btn_pause.setTag(String.valueOf(position));
btn_stop.setTag(String.valueOf(position));
btn_continue.setTag(String.valueOf(position));
pb_progressBar.setTag(String.valueOf(position));
txt_title.setText(Utils.title[position]);
pb_progressBar.setProgress(Utils.progress[position]);
// 将个下载项的进度条加到进度条列表
Async.listPb.add(pb_progressBar);
listStart.add(btn_start);
listStop.add(btn_stop);
listPause.add(btn_pause);
listContinue.add(btn_continue);
// 设置按钮控件的可见性 0 可见,4 不占位不可见 ,8 占位不可见
listStart.get(position).setVisibility(0);
listPause.get(position).setVisibility(8);
listStop.get(position).setVisibility(8);
listContinue.get(position).setVisibility(8);
Async.listPb.get(position).setVisibility(8);
Async.listPb.get(position).setProgress(0);
// 设置监听
btn_start.setOnClickListener(this);
btn_pause.setOnClickListener(this);
btn_stop.setOnClickListener(this);
btn_continue.setOnClickListener(this);
return convertView;
}
Async asyncTask = null;
Map<String, Async> map = null;
@Override
public void onClick(View v)
{
switch (v.getId())
{
case R.id.btn_start:
Async startTask = null;
boolean isHas = false;
// 判断当前要下载的这个连接是否已经正在进行,如果正在进行就阻止在此启动一个下载任务
for(int i=0;i<listTask.size();i++)
{
startTask = listTask.get(i).get(String.valueOf(v.getTag()));
if(startTask!=null)
{
isHas = true;
break;
}
}
// 如果这个连接的下载任务还没有开始,就创建一个新的下载任务启动下载,并这个下载任务加到下载列表中
if(!isHas)
{
asyncTask = new Async(); // 创建新异步
map = new Hashtable<String, Async>();
map.put(String.valueOf(v.getTag()), asyncTask);
listTask.add(map);
// 当调用AsyncTask的方法execute时,就回去自动调用doInBackground方法
asyncTask.execute(String.valueOf(v.getTag()));
// 设置按钮控件的可见性 0 可见,4 不占位不可见 ,8 占位不可见
listStart.get(Integer.parseInt(String.valueOf(v.getTag()))).setVisibility(8);
listPause.get(Integer.parseInt(String.valueOf(v.getTag()))).setVisibility(0);
listStop.get(Integer.parseInt(String.valueOf(v.getTag()))).setVisibility(0);
listContinue.get(Integer.parseInt(String.valueOf(v.getTag()))).setVisibility(8);
Async.listPb.get(Integer.parseInt(String.valueOf(v.getTag()))).setVisibility(0);
}
Log.d("debug","add listTask.size:"+listTask.size());
break;
case R.id.btn_pause:
Async pauseTask = null;
// 判断但前被停止的这个任务在任务列表中是否存在,如果存在就暂停
for(int i=0;i<listTask.size();i++)
{
pauseTask = listTask.get(i).get(String.valueOf(v.getTag()));
if(pauseTask!=null)
{
asyncTask = new Async();
// 为什么这里的asyncTask.isPaused()一直是false??????????
Log.d("debug","-------asyncTask.paused:"+asyncTask.isPaused());
pauseTask.pause();
// 设置按钮控件的可见性 0 可见,4 不占位不可见 ,8 占位不可见
listStart.get(Integer.parseInt(String.valueOf(v.getTag()))).setVisibility(8);
listPause.get(Integer.parseInt(String.valueOf(v.getTag()))).setVisibility(8);
listStop.get(Integer.parseInt(String.valueOf(v.getTag()))).setVisibility(0);
listContinue.get(Integer.parseInt(String.valueOf(v.getTag()))).setVisibility(0);
Async.listPb.get(Integer.parseInt(String.valueOf(v.getTag()))).setVisibility(0);
break;
}
}
Log.d("debug","pause listTask.size:"+listTask.size());
break;
case R.id.btn_continue:
Async continueTask = null;
// 判断但前被停止的这个任务在任务列表中是否存在,如果存在就继续
for(int i=0;i<listTask.size();i++)
{
continueTask = listTask.get(i).get(String.valueOf(v.getTag()));
if(continueTask!=null)
{
asyncTask = new Async();
// 为什么这里的asyncTask.isPaused()一直是false??????????
Log.d("debug","-------asyncTask.paused:"+asyncTask.isPaused());
continueTask.continued();
// 设置按钮控件的可见性 0 可见,4 占位不可见 ,8 不占位不可见
listStart.get(Integer.parseInt(String.valueOf(v.getTag()))).setVisibility(8);
listPause.get(Integer.parseInt(String.valueOf(v.getTag()))).setVisibility(0);
listStop.get(Integer.parseInt(String.valueOf(v.getTag()))).setVisibility(0);
listContinue.get(Integer.parseInt(String.valueOf(v.getTag()))).setVisibility(8);
Async.listPb.get(Integer.parseInt(String.valueOf(v.getTag()))).setVisibility(0);
break;
}
}
Log.d("debug","pause listTask.size:"+listTask.size());
break;
case R.id.btn_stop:
Async cancleTask = null;
// 判断但前被停止的这个任务在任务列表中是否存在,如果存在就移除
for(int i=0;i<listTask.size();i++)
{
cancleTask = listTask.get(i).get(String.valueOf(v.getTag()));
if(cancleTask!=null)
{
// 调用cancle方法就回去调用AsyncTask类的onCancelled方法来停止下载任务
cancleTask.cancel(false);
Log.d("debug","remove sucess?:"+listTask.remove(i));
// 设置按钮控件的可见性 0 可见,4 不占位不可见 ,8 占位不可见
listStart.get(Integer.parseInt(String.valueOf(v.getTag()))).setVisibility(0);
listPause.get(Integer.parseInt(String.valueOf(v.getTag()))).setVisibility(8);
listStop.get(Integer.parseInt(String.valueOf(v.getTag()))).setVisibility(8);
listContinue.get(Integer.parseInt(String
Android应用源码之一个支持暂停下载断点续传的源码-IT计算机-毕业设计.zip
版权申诉
92 浏览量
2022-04-06
21:59:16
上传
评论
收藏 73KB ZIP 举报
![avatar](https://profile-avatar.csdnimg.cn/cb3ef9cd632345779e6826b47461fb9e_qq_27489007.jpg!1)
芝麻粒儿
- 粉丝: 6w+
- 资源: 2万+
最新资源
- 鼎科 烧录工具 Gprobe 最新版本
- 零跑C10车载B站软件安装
- waterfall.js
- 729705932303174springboot员工工资管理系统03j8q.zip
- ST3414-VB一款SOT23封装N-Channel场效应MOS管
- ImageMetadataReader-example.rar
- ST3414S23RG-VB一款SOT23封装N-Channel场效应MOS管
- java房屋租赁管理系统用户管理、房屋管理、租赁交易、支付、评价反馈、通知提醒、报表统计、管理后台和安全隐私
- 基于opencv的人脸识别项目
- ST3413-VB一款SOT23封装P-Channel场效应MOS管
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback-tip](https://img-home.csdnimg.cn/images/20220527035111.png)
评论0