监听都是在activity/fragment里做的,退出的时候我没有暂停任务,而是让任务继续跑着。
看了你#4那里的描述,意思是说我再次进入主页时,只要DownloadManager.addUpdater()添加这样updater,就会获取之前第一次进入主页时启动的那些任务的状态是吗?
原理是啥?是因为DownloadManager 这个是静态类,就会在任务还在跑时,跟你的那个下载进程关联,但是只要app remove掉udpater之后,就不会跟app有关联,从而保持了内存不泄露是吗?
监听器里面引用了视图刷新,如果做后台下载可能会内存泄漏,我是这样理解的。应该可以在退出显示任务进度的界面时,将原有的监听remove掉,再进入这个界面重新添加,不知道可不可以。
@wjd19941224
感谢你的回答。这个问题我想接着问下,#4里面是移除掉updater,这样就会永远跟首页activity解耦了吗?
DownloadManager是app首页创建的,当返回退出时,首页activity被回收,那DownloadManager这个会被回收吗?它好像还一直跟FileDownloadListener有联系着吧?这样activity是不是也会被关联持有着?
按照我的理解,DownloadManager是static单例的,activity的引用是通过添加到updaterList中来产生关联的,而updaterList属于DownloadManager静态单例对象的成员,如果产生泄露,直接原因应该是activity关闭的时候,updaterList还持有其引用,如果在activity的ondestory()方法中,将其从updaterList移除,activity就能解除与DownloadManager单例对象的关联了,不知道理解是否正确
@hu499019771 没错的。
可以通过LeakCanary等工具扫描内存泄露,以确保问题是否解决
可选解决方案:
@wjd19941224 @hu499019771 @Jacksgong 恩。非常感谢。我好好想下。
我也看了 #4 的DownloadManager 我觉得如果使用EventBus 去通知刷新 也是一个不错的选择吧
下载时直接杀掉应用,再次下载时失败,需要手动删掉文件才能重新下载?请问这个怎么解决
@leoncoding 杀进程依然能够断点续传,如果不行就是bug,我这边用demo project 测试是没有问题的。可以测试以后重新提新的单独的Issue。