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
没有合适的资源?快使用搜索试试~ 我知道了~
文件下载上传 一个支持暂停下载断点续传的源码 (程序源码).rar
共28个文件
class:10个
java:4个
xml:4个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 161 浏览量
2023-03-17
08:58:47
上传
评论
收藏 62KB RAR 举报
温馨提示
免责声明:资料部分来源于合法的互联网渠道收集和整理,部分自己学习积累成果,供大家学习参考与交流。收取的费用仅用于收集和整理资料耗费时间的酬劳。 本人尊重原创作者或出版方,资料版权归原作者或出版方所有,本人不对所涉及的版权问题或内容负法律责任。如有侵权,请举报或通知本人删除。
资源推荐
资源详情
资源评论
收起资源包目录
文件下载上传 一个支持暂停下载断点续传的源码 (程序源码).rar (28个子文件)
test_asynctask
.classpath 280B
assets
src
com
ldci
asynctask
Utils.java 483B
Async.java 5KB
AsyncTaskActivity.java 8KB
res
drawable-mdpi
icon.png 3KB
drawable-ldpi
icon.png 2KB
values
strings.xml 177B
layout
list_item.xml 1KB
main.xml 373B
drawable-hdpi
icon.png 4KB
bin
resources.ap_ 12KB
classes.dex 14KB
test_asynctask.apk 20KB
com
ldci
asynctask
AsyncTaskActivity$ListAdapter.class 6KB
AsyncTaskActivity.class 2KB
R$string.class 427B
R$layout.class 427B
R$id.class 550B
R$attr.class 340B
Async.class 6KB
Utils.class 1KB
R$drawable.class 400B
R.class 531B
proguard.cfg 1KB
default.properties 362B
.project 850B
AndroidManifest.xml 793B
gen
com
ldci
asynctask
R.java 1KB
共 28 条
- 1
资源评论
金枝玉叶9
- 粉丝: 195
- 资源: 7637
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功