Com*_*are 18
我应该在这种情况下选择线程或服务?
它不是"或".这是一个"和".您使用后台线程和服务.
从UI的角度来看,服务是"在后台",因为它没有UI.服务是不会自动"在后台"从一个线程的角度来看,在那onCreate(),onDestroy(),onStart(),和onBind()均称为主应用程序线程,由本申请的所有活动共享相同的线程上.任何长时间运行,如下载,都需要在主应用程序线程之外完成,例如使用AsyncTask.
如果您的下载需要继续,即使销毁它们的活动被销毁,您也需要使用服务,服务使用AsyncTask或后台线程来完成下载.更好的是使用an IntentService,它将常规服务与后台线程相结合.
Jan*_*usz 13
在服务中执行操作不会使其在后台运行.您还必须在服务中创建一个Thread,以等待下载完成.
如果您使用的是活动本地的线程,您将无法离开活动,将其发送到后台或由于来电等中断.这可能会导致您的应用被操作系统杀死以释放记忆.在这种情况下,您的线程会丢失,并且可能无法重新启动并使您的应用程序崩溃.
如果你创建一个服务,那么你就不太可能被杀死,只有一个线程,你可以指定操作系统在操作系统被杀死后重启服务.这使得该服务成为非常长时间下载的更安全选择.我在我的一个应用程序中使用服务来下载一个20 MB的文件,并在此服务中创建一个执行下载的线程.
服务只能帮助您封装下载并将其与活动分离,并在操作系统中为您提供另一种状态,以防止线程因内存不足而消失.
| 归档时间: |
|
| 查看次数: |
3664 次 |
| 最近记录: |