2011-03-14 53 views
4

當前我正在使用處理程序調用Web服務方法以使其在後臺運行。問題是它需要更多的時間來給予迴應,在性能方面似乎更加昂貴。現在,我打算進行異步呼叫,這將是最好的? Android中的處理程序和異步調用有什麼區別?請幫我想出一個最佳解決方案。Android中的處理程序vs異步調用

供您參考我在這裏

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

給予一定的代碼片段當點擊登錄按鈕,我打電話這種方法,它看起來像UI調用此方法之前絞死幾分鐘。在這種方法中,涉及兩個昂貴的Web服務調用來認證和註冊用戶。我如何正常化應用程序的緩慢。幫我。

回答

3

使用ThreadHandler分別對使用AsyncTask有一定的好處,它確實取決於您的使用情況,這些好處與損害的分析可能歸結於您。

我會推薦文章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線程將不得不重構。

+0

那些「某些優點?」是什麼? AsyncTask在內部使用線程和處理程序。 – 2011-03-14 15:54:32

+0

@Yoni Samlan我認爲主要的優點是控制和可用性/可管理性,有些情況下AsyncTask似乎對於某個簡單的任務來說太麻煩,而且一個Runnable可能更容易管理,並且同樣適用於其他場景。我並不是想暗示使用一個會導致你的執行變得相當慢/更快。 – 2011-03-14 16:03:09

+0

感謝您的迴應,我編輯我的文章與一些代碼片段供您參考,以瞭解我的問題。 – Rajapandian 2011-03-14 16:28:29

2

AsyncTask在內部使用線程池和處理程序。這不是魔術; see the source。性能不會比你自己的處理程序好得多(除了使用線程池可以節省創建新線程的一小部分開銷的事實,但與典型Web服務調用的持續時間相比,這是微不足道的;額外的毫秒當然不會對用戶造成顯着影響)。考慮到製作網絡請求所涉及的因素數量,您認爲線程/處理程序是什麼讓您的應用程序變慢(而不是網絡連接,服務器通信等)呢?分析你的代碼後面的斷言嗎?

+0

+1。把事情放在不同種類的線程上是完全不相關的。在這兩種情況下,(除非使用executeOnExecutor)任務按順序一次運行一個。 – 2013-02-19 15:58:41

+0

好點,值得添加關於現代AsyncTasks。請記住,只有當你的目標是3.1或更高時,這纔是真實的。 3.0或更低版本,或3.1+與應用程序使用較低的目標SDK(兩年前我寫這個答案時的標準!),默認情況下將使用並行執行(最大爲線程池的大小)。看文檔。 http://developer.android.com/reference/android/os/AsyncTask.html – 2013-02-20 19:01:31