我的应用程序下载文件(每件5-12MB)并从外部存储访问它们。由于下载需要一两分钟,当一个人不在WiFi上时,我希望能够在用户进入他们想要的活动之前开始下载,这样他们就不必等待。
似乎AsyncTask是最好的方式,但后来我意识到未来的活动(据我所知)将无法检查AsyncTask本身的进度,他们能做的最好就是继续检查看看文件是否可读......但如果任务仍在运行或网络连接丢失并需要重试,该怎么办?
如果很快就完成,那么不加选择地重新创建AsyncTask并再次下载文件似乎是浪费。
有没有办法从未来的活动中访问AsyncTask(特别是它的状态),还是我应该看一个更好的范例?
答案 0 :(得分:2)
关于如何为此类目的设计应用程序有一个很酷的解释 - Developing Android REST client applications。
答案 1 :(得分:1)
您可以创建一个在后台下载所需内容的服务。 完成后,您可以通过意图告诉您的应用程序内容已准备就绪并通过stopSelf()停止服务。因此,即使在主屏幕上,您的下载也会一直持续。 因此,请务必创建通知以告知用户并让他有机会取消。 :)
编辑:当然,您可以在服务中使用任务。由于服务不会产生自己的线程,无论如何这可能都是个好主意。