您必须权衡多种考虑因素,才能最好地决定如何处理您的情况。 听起来您需要在这两种方法之间进行良好的比较...因此,这里列出了在使用手持式设备工作时必须考虑的相似性,差异和其他注意事项。
服务是没有UI的应用程序的一部分。 它可以由要启动的UI(Activity)调用,也可以由应用程序的任何其他组件启动。 在开发时,您可以将其放置在不同的线程上,甚至可以在不同的Task或Process中运行。 这使您最终可以将其与UI分开。 另外,您可以根据需要将服务启动为独立运行(startService)或将活动绑定到该服务(bindService)。 通过使用自定义处理程序,您可以设置回调以根据进度更新UI。 如果用户更改了活动,则服务不一定会终止,而是可由操作系统随时终止。
总是从UI线程实例化AsyncTask。 它仅允许特定的回调,但出于相对短的事务(与专用的单独线程服务相比)的目的,简化了多线程的过程,该事务固有地与活动执行的操作相关。 每当用户更改“活动”时,AsyncTask就会处于“暂停”状态,甚至可能会死,因为不再有活动的UI线程。
我最担心的事情是,如果该应用第一次使用10-20分钟,我会假设用户将暂时更改任务或将手机放下直到完成(这可能导致所有 如果手机进入休眠状态,也会出现相同的并发症)。 考虑到这一点,绑定到您的活动的线程服务可能是您的最佳选择。 为了保护您的UI,我将为您的Activity创建一个Progress对话框,以接收您的进度回调。 这限制了用户在您的应用程序中的输入,并允许您的服务继续其所需的方式。 然后覆盖Activity onResume以检查服务的状态以及它是否正在运行。 然后,您可以立即重置对话框。
鉴于这是我的首选方法,因此我还要考虑到OS随时可能会终止该应用程序。 因此,请确保采用某种方法来检测不完整或部分同步。 然后,当“活动”或“服务”重新启动时,您可能会自动恢复。