2009-12-21 164 views
0

这是情景:Android的后台工作方案

  1. 用户有一个用于UI主要活动。
  2. 程序需要与对等方通信并保持连接并等待消息
  3. 当消息到达时,它显示在主活动中。

所以问题是我应该使用服务的通信和什么类型的服务?

也应该在服务中使用AsyncTask以保持我的UI响应,为什么?

回答

5

这里重要的是任何CPU密集型工作或阻塞I/O(包括等待传入的网络连接)都发生在与主UI线程分离的线程中。

如果您只需要网络通信在您的活动处于活动状态时保持运行状态,那么请在活动中使用第二个线程。如果即使在您的活动中断后仍需要维护网络通信,您仍需要使用服务。

请记住,默认行为是指服务与同一应用程序(包括提供您的UI的活动)共享相同的进程和线程。出于这个原因,即使你使用服务,你仍然需要产生一个新的线程来获得所需的效果。

AsyncTask用于在单独的线程中执行任务,最终会终止并返回结果。如果这听起来像你的应用程序,然后随意使用它。但是如果你在一些请求中打开一个端口(意味着你没有单一的返回值),那么使用这个类将会成为一个负担。

+0

伟大的信息特雷弗。 – 2009-12-22 22:21:55