【问题标题】:AyncTask and IntentService when to use?AsyncTask 和 IntentService 什么时候用?
【发布时间】:2013-07-25 08:13:46
【问题描述】:

我无法调用 AsyncTask 和 IntentService。 我正在开发一个具有用户注册活动的 android 应用程序。当用户在注册活动中输入用户名时,我必须通过向服务器发送 HTTP 请求来检查用户名是否已被使用。来自服务器的响应是带有用户名的 JSON 对象。

请帮我接电话设计后台用户名检查 AsyncTask/IntentService 的优缺点。

【问题讨论】:

    标签: java android


    【解决方案1】:

    如果您使用的是 AsyncTask,那么这里就不需要 IntentService。如果您发布代码,我们可以向您展示您可能做错了什么,但是使用 AsyncTask 在线程上发出 HTTP 请求非常简单。

    这是一个很好的例子,说明如何将其用于此目的: http://androidresearch.wordpress.com/2012/03/17/understanding-asynctask-once-and-forever/

    基本上,AsyncTask 只是一个精美的 Thread 包装器,它允许您与显示线程对话。您可以使用执行 HTTP 调用的 Thread 和更新您的显示的 Runnable 来实现完全相同的结果,您的线程可以使用 Handler 调用该显示。

    【讨论】:

      【解决方案2】:

      来自这个有用的answer

      您应该将 AsyncTask 用于短的重复性任务,这些任务是 与活动紧密相关,例如您当前正在尝试做的事情。 IntentService 更适合于计划任务(重复或 不)应该在后台运行,独立于您的活动。

      所以这个建议也适合你。

      除此之外,我建议您查看android volley

      【讨论】:

        【解决方案3】:

        IntentService 和 Asynctask 无论如何都没有可比性。

        IntentSerive

        • Android 组件需要在 AndroidManifest 中注册。
        • 使用这些工作队列设计模式。多个请求放入队列并一一处理。
        • 使用自己的工作线程进行处理。
        • 异步:启动时,你发送和 Intent,Android 系统查询其本地系统以定位合适的服务组件。这意味着 IntentService 可能需要一段时间才能启动。
        • 它在 AndroidManifest 中注册,意味着启用权限后,其他应用将能够通过 Intent 访问它。
        • 上下文的子类

        AsyncTask

        • 又一个花哨的java类
        • 必须从主线程创建和执行。
        • 使用后台线程进行操作。
        • 在其 java 范围之外无法访问。
        • 多次执行需要多个实例
        • 方便的设计模式来执行任何更新 UI 的后台任务
        • 您必须将上下文作为参数传递才能使用它,
        • 用户调用 execute() 时开始执行。没有意图解析要求。

        【讨论】:

        • 我假设两者都是异步运行的,对吧?为什么无论如何都不能比较?
        • 我在 Asyctask 的最后在线添加。当两者都针对相同的目标设计时,比较和基准测试效果更好。让我们说 Service vs IntentService 或 AsyncTask vs AsyncTaskLoader。
        • 你的意思是说可以用AsyncTask/Service实现的目标不能用它的对应部分来实现?
        猜你喜欢
        • 2015-03-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-28
        • 2012-08-07
        • 2012-04-05
        • 1970-01-01
        • 2020-01-09
        相关资源
        最近更新 更多