gpt4 book ai didi

android - 异步 Pubnub 调用阻塞 android ui 线程

转载 作者:行者123 更新时间:2023-11-29 20:09:34 25 4
gpt4 key购买 nike

我正在尝试使用时间方法从 pubnub 获取服务器时间

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;
}
};

所有这些调用都来自 AsyncTaskdoInBackground。为什么它阻塞了我的 ui 线程。此外,发布调用也阻塞了我的 UI 线程,我只从 AsyncTask

调用它们

很多人说 while 循环会阻塞 UI 线程,但我不明白为什么 AsyncTask 中的循环会阻塞 UI 线程。它不在 onPostExecuteonProgressExecute 中。它位于 doInBackground 中,不应阻塞 UI。

另一方面,移除循环仍然会阻塞 UI 线程

mPubnub.time(callback);
mPubnub.publish(channel, message, true, callback);

这些简单的调用会阻塞 UI 线程,应用程序会停止响应。

最佳答案

这会阻塞您的 UI 线程:

while(time == -1);

您应该通过回调处理成功/失败,而不是那样做。如果 pubnub API 接受这样的回调,它看起来就像它已经在后台线程上处理它一样。只需在回调处理程序中采取适当的操作即可。

关于android - 异步 Pubnub 调用阻塞 android ui 线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35209704/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com