我正在使用AsyncTask
我使用HttpUrlConnection
下载图片。我使用BroacastReciever
来监听连接更改。我想知道如何在网络丢失时暂停它并在重新获得连接后继续它。如果任何人都可以提供一些片段/代码,那将会很有帮助。
谢谢。
答案 0 :(得分:3)
据我所知,AsyncTask
无法暂停。
documentation表示他们可以只运行一次。因此,如果您尝试暂停和恢复AsyncTask,则会导致IllegalStateException
。
你能做什么:
在doInBackground()
内,在一定时间间隔后继续检查网络连接。当网络不可用时,取消它并将数据保存在应用程序缓存中。启动计时器以在特定超时后继续检查网络。当网络再次返回时,从您离开的位置开始一个新的AsyncTask(以确定您在缓存中的内容)。最后一部分是我不确定的,因为你需要服务器上的标记,你已经下载了多少以及剩下多少。我不认为所有服务器都提供这一点,这可以从一些下载是可恢复的,而有些则不可用。
另一种非常脏的方式会在您失去网络连接时将后台线程置于休眠状态。
类似的东西:
if(networkConnectivity == false)
do
{
sleep(5000); // pauses the thread for 5 seconds
}while(networkConnectivity == false);