嗨全部 因爲我使用的是一個按鈕,並點擊該按鈕它連接到一個Web服務。 但問題是,當我按下按鈕時,它沒有顯示出它已被點擊並去連接到互聯網和網絡服務。連接後顯示出它已被點擊的響應。總之,按鈕的響應非常緩慢。如果那個buton在Listener中有一些Internet連接。 我知道它與UI線程有關。但請朋友指導我通過這個。安卓按鈕響應問題
多謝,
嗨全部 因爲我使用的是一個按鈕,並點擊該按鈕它連接到一個Web服務。 但問題是,當我按下按鈕時,它沒有顯示出它已被點擊並去連接到互聯網和網絡服務。連接後顯示出它已被點擊的響應。總之,按鈕的響應非常緩慢。如果那個buton在Listener中有一些Internet連接。 我知道它與UI線程有關。但請朋友指導我通過這個。安卓按鈕響應問題
多謝,
將下面的代碼在類:
// 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服務調用和網絡活動都應該在單獨的線程中進行。 線程啓動()調用後,你可以做任何你想做的事情,並立即完成,沒有任何延遲(在你的情況下顯示按鈕按下)。
你必須使用處理器爲這個後臺運行在OS已經要求請點擊此鏈接 progress dialog not showing in android?
你應該寫一類說爲MyWebService和的AsyncTask擴展它。在其重寫的doInBackground()方法中執行連接操作,並更新onPostExecute()方法中的所有UI更改。
在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();
});
這是幹什麼的?爲什麼這更快?非常感謝 – 2015-11-26 22:45:18
我應該更新這個線程中的用戶界面嗎? – 2015-11-26 22:46:15
UI只能從UI線程更新。如果您嘗試從不同的線程執行,則會引發異常。另外,如果您嘗試在UI線程上做太多工作,UI將變得無法響應。總是要在後臺線程中耗時的任務,並在準備就緒後將結果發佈回UI線程以更新UI。 – TofferJ 2015-11-27 09:15:12
你好,我刪除並重新在我的應用程序的意見。我應該在單獨的線程中執行此操作嗎?現在,它很慢 – 2015-11-26 22:50:43