目前我正在使用Handler来调用Web服务方法以使其在后台运行。问题是它花了更多的时间来给出响应,在性能方面似乎更昂贵。现在我打算去Async Calls,这将是最好的一个? Android中处理程序和异步调用之间有什么区别?请帮我提出最佳解决方案。
供我参考,我在这里提供一些代码片段
signIn.setBackgroundResource(R.drawable.signin_press);
changeImage=new Runnable(){
public void run(){
signIn();
}
};
signinHandler.post(changeImage);
当我点击登录按钮时,我正在调用此方法,在调用方法之前,看起来UI被挂了几分钟。在此方法中,涉及两个昂贵的Web服务调用以验证和注册用户。我如何规范应用程序的缓慢。帮助我。
答案 0 :(得分:3)
使用Thread
和Handler
分别使用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服务调用的持续时间相比,这几乎可以忽略不计;额外的几毫秒肯定不会产生用户明显的影响)。考虑到制作网络请求所涉及的因素数量,会让您认为线程/处理程序会降低您的应用程序速度(而不是网络连接,服务器流量等)?是否将您的代码分析回来断言?