对于应该获取和更新新数据的网络作业,建议做什么?我在这个问题上看到了不同的答案。
要创建一个Service
,该Thread
将在新的Thread
内运行,该Service
应该完成所有网络工作或创建一个新的Thread
,该{{1}}将在{{1}}内部启动{{1}} {{1}}?
答案 0 :(得分:2)
您无法创建在线程内运行的服务,因此无法实现这种可能性。您需要一个Thread(或AsyncTask)来执行任何网络请求。如果您希望应用程序继续执行网络请求,即使当前活动已完成,那么您需要在服务中创建该线程(或AsyncTask)。
答案 1 :(得分:0)
在android中所有网络操作都要在一个线程内完成。即使您正在创建服务,所有网络操作也将在一个线程内完成。 线程内的服务是不可能的。
现在,如果您希望网络操作在多个活动中可用,则应创建服务,否则活动中的单独网络线程将完成此任务。
答案 2 :(得分:0)
IntentService
在onCreate
中的主线程上初始化,否则在另一个线程中运行。在这种情况下无需处理额外的线程。 Service
在主线程中运行,并要求您处理线程(如果需要)。最好对IntentService
进行原型设定,因为您只是进行网络通话。如果网络通话很短,那么只需使用AsyncTask
。
答案 3 :(得分:0)
我认为你需要IntentService。无需在Thread内部的服务上混淆。在后台线程内启动服务或启动service with background thread。两者相同。
答案 4 :(得分:0)
最好在服务中调用线程而不是线程内的服务,因为服务是android的一个组件,因此它具有一些优先级。另一方面,Thread不是Android组件的一部分,因此与服务相比没有优先级。
因此,如果Android系统开始查杀应用程序时内存不足,它将首先杀死包含该服务的线程,因为它的优先级较低或没有优先级。如果您使用了包含服务的线程,那么您就是好的。希望它有所帮助:)