【问题标题】:Background tasks without using service - Android不使用服务的后台任务 - Android
【发布时间】:2013-03-21 14:44:16
【问题描述】:

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

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

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

【问题讨论】:

  • IntentService 完全符合您的要求。为什么你不喜欢使用它?请参阅此链接以与 AsyncTask stackoverflow.com/a/4177349/530039进行良好比较
  • 好的..谢谢。但就我而言, 1. 我不想通知用户正在发生的事情。当用户在各种活动中填写一些条目时,我的上传过程(肥皂调用)应该发生。即它应该是一个非常背景的事情,我不希望用户打断他的工作。这可能吗?
  • 您根本不必通知用户。服务应该是您想要的非常背景的东西。试试看。

标签: java android android-service


【解决方案1】:

你可以使用异步任务

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

AsyncTask 被设计为围绕 Thread 和 Handler 的辅助类,并不构成通用的线程框架。 AsyncTasks 最好用于短时间的操作(最多几秒钟)。如果您需要保持线程长时间运行,强烈建议您使用 java.util.concurrent 包提供的各种 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 加载器,不像 Android AsyncTasks 在他们的 UI 线程上通知你的活动。

7.使用简单但健壮的异常处理模型。

【讨论】:

  • 好的..谢谢。但就我而言, 1. 我不想通知用户正在发生的事情。当用户在各种活动中填写一些条目时,我的上传过程(肥皂调用)应该发生。即它应该是一个非常背景的事情,我不希望用户打断他的工作。这可以通过 AsyncTask 实现吗?
  • 在这种情况下,如果它是长时间运行的操作,您必须使用服务或检查 robospice。
【解决方案2】:

我认为 Async 任务是您正在寻找的...http://developer.android.com/reference/android/os/AsyncTask.html

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多