【问题标题】:What to use: service or threads使用什么:服务或线程
【发布时间】:2011-05-04 20:56:51
【问题描述】:

我正在开发一个 android 应用程序,它每 n 分钟从/向网络服务获取/上传数据。此上传/下载仅在应用程序运行时完成。但这在未来可能会改变。

下载新数据时我不更新 UI。 UI 仅在用户在当前屏幕上时更新(应用有多个活动)

我的问题是解决这个问题的最佳方法是什么。 我不认为服务是正确的方法,因为这听起来像是矫枉过正(在目前的情况下)。 AlarmManager 可能是一个选项。 在服务中运行线程是一个选项..类似于this

任何指针/建议都会很棒。 谢谢

【问题讨论】:

    标签: android multithreading web-services


    【解决方案1】:

    我在我的活动中使用AsyncTask 向 .net 网络服务询问一些信息,它有效且易于使用。

    AsyncTask 允许正确且轻松地使用 UI 线程。此类允许在 UI 线程上执行后台操作并发布结果,而无需操作线程和/或处理程序。

    【讨论】:

    • 我最初也尝试过这样做。我调用一个线程来连接到我的获取/上传数据的网络服务。 onPostExecute 甚至在所有数据下载之前就被执行了。你是如何解决这个问题的或对此有什么建议??
    • @Anonymous 在 doInBackground() 中,我执行 http get 请求,一旦得到响应(使用 XML 的 HTTP 200 OK),然后将调用 onPostExecute() 并使用从 XML 解析的响应数据。我正在做一些授权,返回的数据很小。
    • 为什么不使用 ksoap 之类的东西,而是使用 HttpClient
    • 我从 ksoap 开始,然后想要 https,但我不知道如何让它在 ksoap 上工作..
    【解决方案2】:

    好吧,在这种情况下,由于应用程序在此期间已经在运行,因此两者都可以很好地工作,但是可以从应用程序中的任何位置调用服务,所以这是我将通过线程使用服务的地方。

    如果您想创建仅用于让我们说Main.java 的线程,那么线程可以正常工作,这些是我能看到的唯一真正有任何区别的东西,它们真的非常接近,在这种情况下,两者都没有给出明确的“正确”答案,但我会选择服务

    【讨论】:

      【解决方案3】:

      我认为您提到的所有方法都可以。就我个人而言,我会这样做:

      1. 使用 AlarmManager 唤醒下载服务。显示 Activity 时启动,隐藏 Activity 时停止。

      2. 下载服务应该是短暂的:启动它进行上传/下载,然后关闭它。

      3. 如果下载服务确实获得了一些新数据,它会发送一个广播,让 Activity 监听。

      【讨论】:

        【解决方案4】:

        上传/下载完成后广播一条消息,然后让接收器启动服务,然后让该服务自行停止。你就完成了。

        如果您不打算轮询服务器以获取新信息或其他任何内容,则应该这样做。这种方法主要用于一次性更新、解释、完成。并等到下一次更新。在大多数情况下,主要是流式传输.. 但取决于您获得的内容。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-08-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-10-31
          • 1970-01-01
          • 2015-06-11
          相关资源
          最近更新 更多