这是情景:
所以问题是我应该使用服务进行通信以及提供什么类型的服务?
我也应该在服务中使用AsyncTask以保持我的UI响应以及为什么?
答案 0 :(得分:5)
重要的是,任何CPU密集型工作或阻塞I / O(包括等待传入网络连接)都发生在与主UI线程分开的线程中。
如果您只是需要网络通信以在活动处于活动状态时保持运行,请在活动中使用第二个线程。如果您的活动被杀死后仍需要维持网络通信,则需要使用服务。
请记住,默认行为是服务与同一应用程序中的任何其他内容共享相同的进程和线程(包括提供UI的活动)。因此,即使您使用服务,您仍然需要生成一个新线程以获得所需的效果。
AsyncTask用于在单独的线程中执行任务,该线程最终将终止并返回结果。如果这听起来像您的应用程序,那么随意使用它。但是如果你在多个请求中保持一个端口打开(意味着你没有一个返回值),那么使用这个类只会是一种负担。