为了账号安全,请及时绑定邮箱和手机立即绑定

Android-Service系列之断点续传下载

XRay_Chen 移动开发工程师
难度中级
时长 1小时46分
学习人数
综合评分9.53
58人评价 查看评价
9.7 内容实用
9.6 简洁易懂
9.3 逻辑清晰
  • 网络下载的关键点
    查看全部
    2 采集 收起 来源:案例介绍

    2015-04-10

  • 主线程更新UI 1.主线程通过接收广播来更新UI (如图) 注册广播接收者 IntentFilter filter = new IntentFilter(); filter.addAction(DownloadService.ACTION_UPDATE); registerReceiver(mReceiver, filter); 2.在这里启动DownloadTask public void handleMessage(Message msg) { switch (msg.what){ case MSG_INIT: FileInfo fileInfo = (FileInfo) msg.obj; //启动下载任务 mTask = new DownloadTask(DownloadService.this, fileInfo); mTask.downloadFile(); break; } } 3.在DownloadTask中开启线程执行下载任务 public class DownloadTask { public void downloadFile(){ //读取上次下载的信息 List<ThreadInfo> threadInfos = mDao.getThread(mFileInfo.getUrl()); ThreadInfo threadInfo = null; if(threadInfos.size() == 0){ //还没开始下载,创建一个新线程信息 threadInfo = new ThreadInfo(0, mFileInfo.getUrl(), 0, mFileInfo.getLength(), 0); }else { threadInfo = threadInfos.get(0); } //创建子线程并开始下载 new DownloadThread(threadInfo).start(); }
    查看全部
  • 完成下载任务 1.上一笔记已经完成了下载线程的具体实现,小结: (1)这个例子是单线程的,所以数据库中只有finished元素是有用的,其他的元素初始化以后一直都不会变。 即start=0,end=文件长度,url=文件地址 (2)第一次开始下载,start=finished=0,只有下载开始了才会mFinished += len来更新mFinished,然后会更新到数据库中 mDao.updateThread(mThreadInfo.getUrl(), mThreadInfo.getId(), mFinished); (3)接下来再点下载,start将会更新 start = mThreadInfo.getStart()+mThreadInfo.getFinished();//getStart()=0 mFinished也会被更新 mFinished += mThreadInfo.getFinished(); (4)最后一点比较重要!mFinished初始值=0,即使第二次以后点击开始按钮,进来mFinished还是0,更新时是从数据库中直接读取的。 2.在下载任务类中开始这个线程 3.在DownloadService中获得文件长度之后就启动下载任务 4.当点击停止按钮时,就把mTask.isPause置为true if (ACTION_STOP == intent.getAction()){ FileInfo fileInfo = (FileInfo) intent.getSerializableExtra("fileInfo"); Log.i(LOG_TAG, "Stop: "+fileInfo.toString()); if (mTask != null){ mTask.isPause = true; } 这样后台运行的DownloadService就会停止 if (isPause){ mDao.updateThread(…, …, mFinished); return; }
    查看全部
  • onDestory广播接收器
    查看全部
  • 广播接收器更新进度条
    查看全部
  • 项目总体逻辑
    查看全部
    1 采集 收起 来源:案例介绍

    2015-04-12

  • 干净利落
    查看全部
    1 采集 收起 来源:案例介绍

    2015-04-10

  • 多线程下载怎么实现呢,就像慕课网的课程下载怎么实现的,有Demo吗
    查看全部
    1 采集 收起 来源:总结

    2015-04-20

  • RandomAccessFile是 可以在文件任意位置进行写入操作的文件格式 if(conn.getResponseCode()==HttpURLConnection.HTTP_OK){ //获得文件长度 length=conn.getContentLength(); }
    查看全部
  • 案例分析
    查看全部
    0 采集 收起 来源:案例介绍

    2016-05-05

  • 案例结构
    查看全部
    0 采集 收起 来源:案例介绍

    2016-05-05

  • 学习内容
    查看全部
    0 采集 收起 来源:案例介绍

    2016-04-20

  • 设置下载位置 设置文件写入位置
    查看全部
  • 。。。
    查看全部
    0 采集 收起 来源:总结

    2016-04-03

  • 用seek()方法设置读写位置
    查看全部
首页上一页1234567下一页尾页

举报

0/150
提交
取消
课程须知
需要完成Android攻城师入门的学习
老师告诉你能学到什么?
1:如何实现断点续传 2:使用广播接收消息 3:多线程技术更新UI 4:Service的实际应用

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!