在我正在开发的这个应用程序中,我正在缓存在线音频等内容。在应用程序的某些点,我对应用程序预测用户将很快需要的内容运行批量下载。所有这些都是通过我自己的缓存系统和后台线程完成的。它的基本要点是我向我的缓存发送 url,它散列到一个文件名,然后我们搜索文件的正确位置,如果它在那里,我们返回我们找到的文件的位置,如果没有,我们下载文件,然后返回文件的位置。当我进行批处理操作时,我将它们放入队列中,这样它们就不会阻塞线程池,并且无法完成其他更高优先级的异步任务。
这是问题所在。
如果我当前正在将某个音频文件写入 sd 卡,如果我在队列运行时请求它,会发生什么?两个线程可以尝试一次写入同一个文件吗?
或者它会找到该文件,并返回一个创建一半且损坏的文件?
我该如何避免这种情况?
我曾想过可能通过优先级队列运行所有内容,但是对于能够运行多个异步线程的设备,这将产生更严格的瓶颈。
编辑:
我的应用涵盖 android 2.3-current
根据这个线程 同时运行多个 AsyncTasks -- 不可能吗?
似乎取决于操作系统/设备版本,任务可能会并行运行(一次全部运行到一个限制)或一次一个。
xD 这就是为什么我要自己管理它们。