不使用服务的后台任务 - Android

时间:2013-03-21 14:44:17

标签: java android android-service

我正在开发一个有5到6个用户参与的活动的应用程序。在此期间将生成一些数据并将其保存到数据库中。

我需要在服务器之间上传/同步这些数据(我使用KSOAP2)。但这应该发生在后面。即使用户在活动之间跳跃,也不应该受到影响。但是当我退出应用程序时,我不希望这个过程继续。

Android服务是唯一的方法吗?什么是最好的选择?

3 个答案:

答案 0 :(得分:1)

您可以使用异步任务

http://developer.android.com/reference/android/os/AsyncTask.html。请查看 4个步骤标题下的文档。

AsyncTask旨在成为Thread和Handler的辅助类,并不构成通用的线程框架。理想情况下,AsyncTasks应该用于短操作(最多几秒钟。)如果需要保持线程长时间运行,强烈建议您使用java.util.concurrent pacakge提供的各种API,例如Executor,ThreadPoolExecutor和FutureTask。

在setContentView()

之后的活动中
    pd= new ProgressDialog(this);
    pd.setTitle("Making Soap Request");
     new SoapRequestTask().execute();

 private class SoapRequestTask extends AsyncTask<VOid, Void, Void> {

  protected void onPreExecute()
  {
      pd.show();
  }
   protected SoapObject doInBackground(Void... params) {
    // TODO Auto-generated method stub
           //Soap request. do not update ui here
    return null;
    }

 protected void onPostExecute(Void param)
 {   
      //update ui here
  pd.dismiss();

 }

asynctask的替代方法是 Robospice https://github.com/octo-online/robospice

你可以在这里开始使用robopice。 https://github.com/octo-online/robospice/wiki/Starter-Guide

https://play.google.com/store/apps/details?id=com.octo.android.robospice.motivations&feature=search_result的robospice样本。

robospice的一些功能。

1.异步执行(在后台AndroidService中)网络请求(例如:使用Spring Android的REST请求)。

2.强类型!您使用POJO发出请求,并获得POJO作为请求结果。

3.对用于请求的POJO和您在项目中使用的Activity类都没有约束。

4.caches结果(在Json中使用Jackson和Gson,或Xml,或平面文本文件,或二进制文件,甚至使用ORM Lite)。

5.当您的活动(或任何其他上下文)显示网络请求的结果时,当且仅当它们仍然存在时

6.完全没有内存泄漏,比如Android Loaders,不像Android AsyncTasks通过他们的UI线程通知你的活动。

7.使用简单但强大的异常处理模型。

答案 1 :(得分:0)

我认为异步任务就是你要找的...... http://developer.android.com/reference/android/os/AsyncTask.html

答案 2 :(得分:0)

不,您可以使用AsyncTask。文档:http://developer.android.com/reference/android/os/AsyncTask.html