Suv*_*ica 32 multithreading android android-service android-asynctask
我稍微感到困惑之间的差异Asynctask,Thread,Service,Loader在Android系统.
我知道它是如何工作的.但我仍然不明白我应该使用什么以及何时使用.
我使用Android工作了3年,并且通常仍然AsyncTask用于所有后台任务(有时候用于Thread).但是很多人说"Asynctask已经过时了",不建议使用它们.他们还建议使用robospice或Volley.
那么,AsyncTask真的很糟糕,我应该使用框架进行网络任务?我应该将什么用于后台(而不是网络)任务?
Pra*_*dav 26
线程:与Java线程相同,使用它来执行繁重的操作,但是您必须自己管理它,它也可能导致同步问题,并且在UI线程上运行UI之前无法从中更新UI.
AsyncTask:Android中可用于执行后台任务的强大线程库.它由Android操作系统本身管理,您可以从中更新UI.它根据android的版本并行或串行运行.有时候使用它可能会很麻烦,因为在方向改变的情况下,现在为了进行网络呼叫你可以使用优于AsyncTask.的凌空.AsyncTasks不关心他们的父活动是否正在运行,有时取消它可能会非常繁琐.所以,我想,如果你正在使用的AsyncTask使其余的API调用更好地利用建议你RETROFIT或VOLLEY,如果你选择在两者之间RETROFIT我建议你看看PICASSO从方形的图像加载另一个真棒库.
服务:对于长期后台任务,您应该使用服务.如果需要,您可以将服务绑定到您的活动.您可以定义它们在同一个线程或不同的线程中运行,您需要在清单中声明它,或者您可以使用IntentService- 在自己的线程中运行的服务变体但在使用之前要小心,不要将它用于长期运行的任务.这是一个单一的运营商.如果您打算使用服务,请评估适合您要求的情况,更好的是正常服务或IntentService
AsyncTask加载器:这与许多方面相同,建议使用带有碎片的加载器,它解决了asynctasks的方向问题.
如果您已经转移到kotlin,我建议您查看Coroutines.这些非常轻巧,对于线程非常有效,并为您提供对生命周期的大量控制.我希望这有帮助.
hum*_*kie 20
AysncTasks并非"过时",因为它们不完整.除其他事项外,如果父活动当前正在运行,则异步任务不会受到影响.出于同样的原因,您可以包含检查以验证上下文是否为空.此外,除非您使用自己的线程池执行程序,否则这些任务将以串行方式执行.
Volley试图填补这些空白,主要涉及与主线程和线程池的同步.如果您希望执行需要平均网络请求的内容,它会表现得最佳; 像一些元数据列表和图像(图片youtube应用程序请求和Facebook应用程序请求的帖子).
通常,Volley的几个优点如下
在Google I/O中提到的流式传输请求/视频时,Volley的表现非常糟糕.
我并不完全了解robospice.Ps:如果你有时间,请看https://www.youtube.com/watch?v=yhv8l9F44qo
如果您希望进入具有相同基准的其他库,可以进一步阅读. Android网络库的比较:OkHTTP,Retrofit和Volley