在服务类中使用AsyncTask?

我必须将数据上传到服务器。 我正在使用与我的应用程序在同一进程上运行的服务。 我应该使用单独的线程进行上传过程还是应该使用AsyncTask将数据上传到服务器?

更具体地说,我可以在服务类中使用AsyncTask吗? 我应该使用它吗? 此服务应始终在内存中运行,以便每5秒向服务器发送一次数据。

是的,你可以,下面的代码将每5秒运行一次。 使用常规连接代码发送部件。

public class AsyncTaskInServiceService extends Service { public AsyncTaskInServiceService() { super("AsyncTaskInServiceService "); } @Override public void onCreate() { // TODO Auto-generated method stub super.onCreate(); } @Override protected void onHandleIntent(Intent intent) { final Timer t = new Timer(); t.scheduleAtFixedRate(new TimerTask() { @Override public void run() { //Connect to database here try { } catch (JSONException e) { e.printStackTrace(); } } }, 0, 5000); } } 

在服务中使用AsyncTask没问题。

NOTE / FIX:当我说服务在后台运行时,我错了,它只适用于IntentService。 正如评论和文档中所述,服务不会创建自己的线程:

警告:服务在其托管进程的主线程中运行 – 该服务不会创建自己的线程,也不会在单独的进程中运行(除非您另行指定)。 这意味着,如果您的服务要进行任何CPU密集型工作或阻止操作(例如MP3播放或网络),您应该在服务中创建一个新线程来完成这项工作。

这意味着您必须使用AsyncTask(或任何情况下的其他线程)来执行上载任务。