2011-05-11 33 views
1

嗨全部 因爲我使用的是一個按鈕,並點擊該按鈕它連接到一個Web服務。 但問題是,當我按下按鈕時,它沒有顯示出它已被點擊並去連接到互聯網和網絡服務。連接後顯示出它已被點擊的響應。總之,按鈕的響應非常緩慢。如果那個buton在Listener中有一些Internet連接。 我知道它與UI線程有關。但請朋友指導我通過這個。安卓按鈕響應問題

多謝,

回答

1

將下面的代碼在類:

// Need handler for callbacks to UI Threads 
    // For background operations 
    final Handler mHandler = new Handler(); 

    // Create Runnable for posting results 
    final Runnable mUpdateResults = new Runnable() { 
     public void run() { 
      // Do your task which needs to get done after webservice call is complete. 
     } 
    }; 

以及調用WebService的使用下面的代碼在按鈕事件:

new Thread() { 
      public void run() {    
       // Place the webservice call here. 

       mHandler.post(mUpdateResults); 
      } 
      }.start(); 

其實你在找什麼是多線程,所有的web服務調用和網絡活動都應該在單獨的線程中進行。 線程啓動()調用後,你可以做任何你想做的事情,並立即完成,沒有任何延遲(在你的情況下顯示按鈕按下)。

1

你必須使用處理器爲這個後臺運行在OS已經要求請點擊此鏈接 progress dialog not showing in android?

+0

你好,我刪除並重新在我的應用程序的意見。我應該在單獨的線程中執行此操作嗎?現在,它很慢 – 2015-11-26 22:50:43

1

你應該寫一類說爲MyWebService和的AsyncTask擴展它。在其重寫的doInBackground()方法中執行連接操作,並更新onPostExecute()方法中的所有UI更改。

1

在onClickListener中創建一個新的線程,在後臺執行繁重的工作。這樣,UI線程就可以更新按鈕的狀態:

button.setOnClickListener(new OnClickListener() { 

    @Override 
    public void onClick(View v) { 
     new Thread(new Runnable() { 

     @Override 
     public void run() { 
      // Code that connects to web service goes here... 
     } 
    }).start(); 
}); 
+0

這是幹什麼的?爲什麼這更快?非常感謝 – 2015-11-26 22:45:18

+0

我應該更新這個線程中的用戶界面嗎? – 2015-11-26 22:46:15

+1

UI只能從UI線程更新。如果您嘗試從不同的線程執行,則會引發異常。另外,如果您嘗試在UI線程上做太多工作,UI將變得無法響應。總是要在後臺線程中耗時的任務,並在準備就緒後將結果發佈回UI線程以更新UI。 – TofferJ 2015-11-27 09:15:12