Filedownloader: 你好,使用中出现bug

Created on 27 May 2016  ·  14Comments  ·  Source: lingochamp/FileDownloader

实际使用中,似乎存在多次点击会出现这个错误(特别是下载准备完成时)。
我尝试做判断,如果为空,不调用callback,但这样,似乎又会出现其他问题

java.lang.NullPointerException
at com.liulishuo.filedownloader.FileDownloadMessenger.handoverMessage(FileDownloadMessenger.java:257)
at com.liulishuo.filedownloader.FileDownloadMessageStation$UIHandlerCallback.dispose(FileDownloadMessageStation.java:179)
at com.liulishuo.filedownloader.FileDownloadMessageStation$UIHandlerCallback.handleMessage(FileDownloadMessageStation.java:170)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:153)
at android.app.ActivityThread.main(ActivityThread.java:5000)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:821)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:584)
at dalvik.system.NativeStart.main(Native Method)

另,麻烦修复一下:
不明白为什么跑到这个分支 ,可能 也是多次点击 ?
java.util.MissingFormatArgumentException: Format specifier: d
at java.util.Formatter.getArgument(Formatter.java:1111)
at java.util.Formatter.doFormat(Formatter.java:1076)
at java.util.Formatter.format(Formatter.java:1042)
at java.util.Formatter.format(Formatter.java:1011)
at java.lang.String.format(String.java:1999)
at com.liulishuo.filedownloader.util.FileDownloadUtils.formatString(FileDownloadUtils.java:286)
at com.liulishuo.filedownloader.services.FileDownloadRunnable.run(FileDownloadRunnable.java:166)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:841)

bug question

All 14 comments

对了,我在complete中有 task.setListener(null);
是否是因为这个导致第一个问题?

task.setListener(null) 导致的,在任务结束以后(paused/completed/error/warn),FileDownloader会释放该任务,不用担心内存泄漏问题。

你使用的版本是?

defaultConfig {
    minSdkVersion 8
    targetSdkVersion 21
    versionCode 19
    versionName "0.2.8"
}

sorry,我说的是你使用的FileDownloader是哪个版本,是0.3.1吗?

不好意思,我应该说明白点的,
我是直接将FileDownloader源码导入工程的,
上面的就是FileDownloader的build.gradle配置
0.2.8

好的。你使用最新的版本(0.3.1),再提供下日志,我再看下可以吗?

你想看这个错误的log吗?
java.util.MissingFormatArgumentException: Format specifier: d

错误是友盟后台看到的,只是有1~2次的错误。
我不确定是在什么情况下会触发这个错误。
本地调试并没有重现这个错误,我现在的处理仅仅是修改这个代码,保证它不抛出错误。

换最新版本的话,暂时还不打算更换,很忙呀,抱歉。

和经理商量了一下,也看了一下change log,决定更新到0.3.1版本。
如果更新后,还发现有这个问题,我再过来提问。

好的,没事,我回退到v0.2.8的代码给你看了下:

首先:

是不需要在任务结束时,主动去释放listener的(task.setListener(null)),因为在任务结束以后(paused/completed/error/warn),FileDownloader会释放该任务,不用担心内存泄漏问题。 不过我回退到v0.2.8对上代码行数以后给你看了下并非这个导致的:

问题1:

java.lang.NullPointerException
at com.liulishuo.filedownloader.FileDownloadMessenger.handoverMessage(FileDownloadMessenger.java:257)
at com.liulishuo.filedownloader.FileDownloadMessageStation$UIHandlerCallback.dispose(FileDownloadMessageStation.java:179)
at com.liulishuo.filedownloader.FileDownloadMessageStation$UIHandlerCallback.handleMessage(FileDownloadMessageStation.java:170)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:153)
at android.app.ActivityThread.main(ActivityThread.java:5000)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:821)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:584)
at dalvik.system.NativeStart.main(Native Method)

对于v0.2.8这个Crash我还没有看出原因,报Crash的257行的 next = messageArrived(message.getSnapshot().getStatus());的前面的255行中、以及248行也有掉 message.getSnapshot().getStatus()。你可以留意下你的这个Crash是在v0.2.8报出的吗?

问题2:

java.util.MissingFormatArgumentException: Format specifier: d
at java.util.Formatter.getArgument(Formatter.java:1111)
at java.util.Formatter.doFormat(Formatter.java:1076)
at java.util.Formatter.format(Formatter.java:1042)
at java.util.Formatter.format(Formatter.java:1011)
at java.lang.String.format(String.java:1999)
at com.liulishuo.filedownloader.util.FileDownloadUtils.formatString(FileDownloadUtils.java:286)
at com.liulishuo.filedownloader.services.FileDownloadRunnable.run(FileDownloadRunnable.java:166)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:841)

这个确实是代码bug,在一个低概率的情况下,我会在下个版本修复。

问题1

可能是因为我之前调试过,导致行数和源码的对不上了。
我本地的是这行
task.getListener().callback(message);
listenner 为空导致的

版本号我没有改过

ok,那我会尽快将问题2修复了的。修复了以后与发布新版本我会评论在这个issue的,你关注下。

问题1的出现,可能是我用法不对。

我原来要实现界面退出,重新进来,还要实时显示下载进度条,怕泄露界面activity了。
现在我知道怎么做了,刚看了问题4的答案。

好的,耽误你时间了。

Fixed since v0.3.2.

Was this page helpful?
0 / 5 - 0 ratings