lingochamp / okdownload

A Reliable, Flexible, Fast and Powerful download engine.
Apache License 2.0
5.16k stars 772 forks source link

某些文件断点信息记录异常 #380

Open javakam opened 4 years ago

javakam commented 4 years ago

v1.0.7-SNAPSHOT 出现了和 #79 相似的BUG ,下面这个MP3下载完成大退app后获取到的BreakPointInfo是个空对象,状态为UNKOWN 。一个几M的MP3文件 : https://dl.stream.qqmusic.qq.com/M800001KXr543Qplnl.mp3?guid=120784105&vkey=55603F7F55664D8E38AE77EF9C3048B42FDAA12A08912E93361B24359C5342852B7566CC1E6887B7ADD8845B609CCDFFDE81F813D0A44B8C&uin=0&fromtag=66

退出QueueActivity 后重新进来,通过 TagUtil.getStatus(task) 获取临时的status是没问题的,大退重新进入后页面的LOG:

2020-03-20 23:54:09.021 27050-27050/com.liulishuo.okdownload.sample I/Timeline: Timeline: Activity_launch_request time:762475638 2020-03-20 23:54:09.048 27050-27050/com.liulishuo.okdownload.sample W/ActivityThread: handleWindowVisibility: no activity for token android.os.BinderProxy@edc3bbf 2020-03-20 23:54:09.055 27050-27077/com.liulishuo.okdownload.sample D/ViewContentFactory: initViewContentFetcherClass 2020-03-20 23:54:09.055 27050-27077/com.liulishuo.okdownload.sample I/ContentCatcher: ViewContentFetcher : ViewContentFetcher 2020-03-20 23:54:09.055 27050-27077/com.liulishuo.okdownload.sample D/ViewContentFactory: createInterceptor took 0ms 2020-03-20 23:54:09.123 27050-27050/com.liulishuo.okdownload.sample D/Util: Get final download store is com.liulishuo.okdownload.core.breakpoint.RemitStoreOnSQLite@779b2ee 2020-03-20 23:54:09.123 27050-27050/com.liulishuo.okdownload.sample D/OkDownload: downloadStore[com.liulishuo.okdownload.core.breakpoint.BreakpointStoreOnSQLite@569e38f] connectionFactory[com.liulishuo.okdownload.core.connection.DownloadOkHttp3Connection$Factory@105a61c 2020-03-20 23:54:09.221 27050-27050/com.liulishuo.okdownload.sample D/QueueController: bind 0 for https://dl.stream.qqmusic.qq.com/M800001KXr543Qplnl.mp3?guid=120784105&vkey=55603F7F55664D8E38AE77EF9C3048B42FDAA12A08912E93361B24359C5342852B7566CC1E6887B7ADD8845B609CCDFFDE81F813D0A44B8C&uin=0&fromtag=66 2020-03-20 23:54:09.221 27050-27050/com.liulishuo.okdownload.sample I/QueueListener: bind 1 with ViewHolder{f7f96b position=0 id=-1, oldPos=-1, pLpos:-1 no parent} 2020-03-20 23:54:09.221 27050-27050/com.liulishuo.okdownload.sample D/DownloadDispatcher: isPending: 1 2020-03-20 23:54:09.221 27050-27050/com.liulishuo.okdownload.sample D/DownloadDispatcher: isRunning: 1 2020-03-20 23:54:09.239 27050-27050/com.liulishuo.okdownload.sample D/QueueController: bind 1 for http://dldir1.qq.com/weixin/android/weixin6516android1120.apk 2020-03-20 23:54:09.239 27050-27050/com.liulishuo.okdownload.sample I/QueueListener: bind 2 with ViewHolder{ac11486 position=1 id=-1, oldPos=-1, pLpos:-1 no parent} 2020-03-20 23:54:09.239 27050-27050/com.liulishuo.okdownload.sample D/DownloadDispatcher: isPending: 2 2020-03-20 23:54:09.239 27050-27050/com.liulishuo.okdownload.sample D/DownloadDispatcher: isRunning: 2


然鹅,微信apk断点信息正常,mp3 的信息没有获取到,debug得到BreakPointInfo对象是空
javakam commented 4 years ago

39 类似的情况

javakam commented 4 years ago

暂时解决了这个问题,不确定是否会出现其他的问题 ,解决方法:

com.liulishuo.okdownload.sample.util.queue.QueueListener 中: 
 override fun taskEnd(
         task: DownloadTask,
         cause: EndCause,
         realCause: Exception?,
         model: Listener1Assist.Listener1Model
 ) {
     val status = cause.toString()
     TagUtil.saveStatus(task, status)
     //OkDownload.with().breakpointStore().createAndInsert(task)
     //手动更新断点信息到数据库
     **task.info?.let { OkDownload.with().breakpointStore().update(it) }**
......