我知道(我认为如此)如何从给定的URL下载文件。使用HTTP客户端下载文件并将其包装在runnable中。我假设为了能够并行下载多个文件,我可以简单地创建runnable的更多实例,并将它们添加到ExecutorService。
我已经创建了使用SQLite DB的框架。使用ASync任务获取getwritabledatase,然后添加与下载到数据库的文件相关的一些属性。
我无法解决的问题是如何确保我可以允许用户下载多个文件,并在完成下载时添加数据库条目,所有这些都以异步方式进行,以便用户可以自由导航到另一项活动(当他退出时不必处理要求)/
在httpclient返回文件后,我可以在runnable / run()中启动异步任务吗?或者这是一个不好的做法,因为runnable已经啜饮1个线程,然后另一个以异步任务的形式啜饮?还有其他建议吗?
不幸的是我不能使用git / etc上某人提供的外部库。
答案 0 :(得分:0)
在httpclient返回文件后,我可以在runnable / run()中启动异步任务吗?或者这是一个不好的做法,因为runnable已经啜饮1个线程,然后另一个以异步任务的形式啜饮?还有其他建议吗?
下载文件并将条目写入数据库是两个独立的操作。您不应该在同一AsyncTask
或Runnable
内同时执行这两项操作。它会起作用,但我认为这是一个糟糕的架构。
通常你有类似下载管理器的东西,这是一个有上述执行者的类。您可以从控制器中调用此下载管理器,例如活动或片段,一旦收到回调,您就可以启动将数据写入数据库的后台任务。它可以是任何内容:AsyncQueryHandler
,Runnable
,AsyncTask
等。选择一种更适合您用例的解决方案。
(当他退出时不必处理要求)/
只要您使用独立于UI的组件(例如Service
),这根本不是问题。您无需使用UI来下载文件并将其写入数据库。