gpt4 book ai didi

android - AsyncTask get() 有时会卡住

转载 作者:行者123 更新时间:2023-12-05 00:17:44 26 4
gpt4 key购买 nike

我有一个简单的类来处理 http 请求。因为自 Android 3.1 以来此任务需要在不同的线程中执行,所以我创建了以下线程阻塞类,它使用 get 来等待请求完成。

第一次它有效,但之后我总是超时或只是卡住应用程序。这是我的代码:

class MakeRequest extends AsyncTask<String,Integer,Void>
{

@Override
protected Void doInBackground(String... params) {
DefaultHttpClient cli = new DefaultHttpClient();
try {
String url = params[0].replace(" ", "%20");
HttpResponse resp = cli.execute(new HttpGet(url));
BufferedReader read = new BufferedReader(new InputStreamReader(resp.getEntity().getContent()));
String tmp = "",rezultat = "";
setResult("");

while ((tmp = read.readLine()) != null)
{
rezultat = rezultat + tmp;
}
setResult(rezultat);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
setResult("");
return null;
}
return null;
}



}

static public String req(Context ctx,String url,boolean want_resp)
{

if (isOnline(ctx))
{
HttpRequester cc = new HttpRequester();
MakeRequest test = cc.new MakeRequest();
test.execute(url);
if (want_resp)
{
try {
test.get(30000, TimeUnit.MILLISECONDS);
}
catch (Exception e)
{
return "FAIL";
}
return result;
}
else return "OK";
}
else
{
Toast.makeText(ctx, "Internet connection required", Toast.LENGTH_SHORT).show();
setResult("");
return "";
}
}

最佳答案

AsyncTask.get(long timeout, TimeUnit unit);

如有必要,最多等待给定时间计算完成,然后检索其结果。因此它会阻塞 UI

test.get(30000, TimeUnit.MILLISECONDS);

这将使您的主线程等待 AsyncTask 的结果最多 30000 毫秒。

关于android - AsyncTask get() 有时会卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12196227/

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