处理程序与Android中的异步调用

时间:2011-03-14 15:17:44

标签: android multithreading handler android-asynctask

目前我正在使用Handler来调用Web服务方法以使其在后台运行。问题是它花了更多的时间来给出响应,在性能方面似乎更昂贵。现在我打算去Async Calls,这将是最好的一个? Android中处理程序和异步调用之间有什么区别?请帮我提出最佳解决方案。

供我参考,我在这里提供一些代码片段

signIn.setBackgroundResource(R.drawable.signin_press);
changeImage=new Runnable(){
     public void run(){                                 
            signIn();
        }
    };      
signinHandler.post(changeImage);

当我点击登录按钮时,我正在调用此方法,在调用方法之前,看起来UI被挂了几分钟。在此方法中,涉及两个昂贵的Web服务调用以验证和注册用户。我如何规范应用程序的缓慢。帮助我。

2 个答案:

答案 0 :(得分:3)

使用ThreadHandler分别使用AsyncTask有一些优势,这实际上取决于您的使用情况,而这些利益与损害的分析可能会归结为您。< / p>

我会推荐文章Painless Threading,以便对Android上的线程有一点了解。

编辑以获取其他相关信息。

如果我们调整链接的Painless Threading文章中的代码,您可以得到类似的内容。

  new Thread(new Runnable() {
    public void run() {
      signIn();
      signinHandler.post(new Runnable() {
        public void run() {
          //TODO: Something to notify of login complete / continue processing.
        }
      });
    }
  }).start();

在TODO中你需要继续或通知执行,我不知道signIn()当前处理的是什么,所以如果它穿过UI线程,它将不得不重构。

答案 1 :(得分:2)

AsyncTask在内部使用线程池和处理程序。这不是魔术; see the source。性能不会比你自己的处理程序好得多(除了使用线程池可以节省一点创建新线程的开销这一事实,但与典型的Web服务调用的持续时间相比,这几乎可以忽略不计;额外的几毫秒肯定不会产生用户明显的影响)。考虑到制作网络请求所涉及的因素数量,会让您认为线程/处理程序会降低您的应用程序速度(而不是网络连接,服务器流量等)?是否将您的代码分析回来断言?