【发布时间】:2014-08-02 08:08:31
【问题描述】:
对于应该获取和更新新数据的网络作业,建议做什么?我在这个问题上看到了不同的答案。
要创建一个Service,它将在一个新的Thread 中运行,该Thread 应该完成所有网络作业,或者创建一个新的Thread,它将在Service 内部启动一个Thread?
【问题讨论】:
标签: java android multithreading service
对于应该获取和更新新数据的网络作业,建议做什么?我在这个问题上看到了不同的答案。
要创建一个Service,它将在一个新的Thread 中运行,该Thread 应该完成所有网络作业,或者创建一个新的Thread,它将在Service 内部启动一个Thread?
【问题讨论】:
标签: java android multithreading service
您不能创建在线程内运行的服务,因此这种可能性是不可能的。您需要一个线程(或 AsyncTask)来执行任何网络请求。如果您希望应用程序在当前 Activity 完成的情况下继续执行网络请求,那么是的,您需要在 Service 中创建该线程(或 AsyncTask)。
【讨论】:
在android中所有的网络操作都是在一个线程内完成的。即使您正在创建服务,所有网络操作都将在一个线程中完成。 线程内的服务是不可能的。
现在,如果您希望您的网络操作在多个活动中可用,您应该创建一个服务,否则活动中的一个单独的网络线程将完成这项工作。
【讨论】:
IntentService 在onCreate 的主线程上初始化,否则在单独的线程中运行。在这种情况下不需要处理额外的线程。 Service 在主线程中运行并要求您处理线程(如果需要)。最好对IntentService 进行原型设计,因为您只是在进行网络调用。如果网络调用很短,那么只需使用AsyncTask。
【讨论】:
我认为你需要IntentService。无需混淆 Thread 内的 Service。在后台线程中启动服务或启动service with background thread。两者都是一样的。
【讨论】:
在服务内部调用线程总是比在线程内部调用服务更好,因为服务是 android 的一个组件,因此它具有一定的优先级。另一方面,线程不是 Android 组件的一部分,因此与服务相比,它没有优先级。
所以当Android系统开始杀应用程序时,如果内存不足,它会首先杀掉包含该服务的线程,因为它的优先级较低或没有。如果您使用过包含线程的服务,那么您很好。希望对你有帮助:)
【讨论】: