我試圖從pubnub得到服務器的時間與時間的方法異步Pubnub調用阻止Android的UI線程
mPubnub.time(callback);
我想這是一個異步調用,然後我有一個等待循環剛過,所以我可以等待對於結果
time = -1;
mPubnub.time(callback);
while(time == -1);
在回電我
Callback callback = new Callback() {
public void successCallback(String channel, Object response) {
try {
JSONArray jsonArray = new JSONArray(response.toString());
time = jsonArray.getLong(0)/10000;
return;
} catch (JSONException e) {
e.printStackTrace();
}
time = 0;
}
public void errorCallback(String channel, PubnubError error) {
Log.wtf("error/" + channel, error.toString());
time = 0;
}
};
所有這些電話來自AsyncTask
的doInBackground
。它爲什麼阻止我的UI線程。還要求發佈也擋住了我的UI線程,我只能從AsyncTask
很多人打電話給他們說while循環阻塞UI線程,但我不明白,爲什麼在那的AsyncTask循環會阻止用戶界面線程。它不在onPostExecute
或onProgressExecute
中。它在doInBackground
,它不應該阻止用戶界面。
在另一方面去除環路仍然塊UI線程
mPubnub.time(callback);
mPubnub.publish(channel, message, true, callback);
這些簡單的呼叫阻塞UI線程和所述應用程序停止響應。
即使我這樣做,一個簡單的發佈是阻止ui線程。我實際上處理以下回調,但我想了解爲什麼後臺任務阻止UI線程 – user2798694
如果您正在這樣做一個while循環,則會阻塞該線程。 –
while(時間== -1)如上所述阻止你的線程。把日誌消息放在那裏,你會看到。 –