从 Activity 或 IntentService 启动 AsyncSync 之间有什么区别吗?
我正在构建一个通过 http 下载和上传文件的应用程序。我为每次传输使用带有进度条的自定义通知布局。
我选择并行传输或将它们放入队列(您会推荐哪个选项?)。
对于队列选项,我使用 IntentService,因此 Android 框架负责将任务放入队列中。
为了让它们并行,我使用 AsyncTasks。但我从 IntentService (也可能是 Service)启动它们 - 这样做有什么意义吗? IntentService 在执行 AsyncTask 后立即终止,因此 AsyncTask 在没有任何“父级”的情况下运行。
如果我从 Activity 启动这些 AsyncTask,转到主屏幕并且系统决定关闭此 Activity,该怎么办?它能做到吗? AsyncTask 能幸存下来吗?
对于这种情况,首选方法是什么?
AsyncTask 并不真正适合您担心在组件生命周期之外生存的情况(如果您需要向该组件发送消息)。如果您打算提供服务,我什至不会费心使用 AsyncTasks。至于并行或队列,这实际上取决于很多不同的变量,但我当然不会使其对于任意数量的下载/上传完全并行。我对并发传输的最大数量设置了一些限制。
使用 IntentService 进行并行执行是没有意义的——您已经注意到了这个问题。您正在进入 Android API 并未真正涵盖的领域。 AsyncTask 和 IntentService 是很好的抽象,它们使多种场景变得简单,但并行执行许多任务并不是其中之一。最好使用一些 Java 线程/并发类。看一眼线程池执行器 http://download.oracle.com/javase/1,5.0/docs/api/java/util/concurrent/ThreadPoolExecutor.html.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)