gpt4 book ai didi

java - 使用 ExecutorService 时 Activity 滞后

转载 作者:行者123 更新时间:2023-11-30 10:48:01 24 4
gpt4 key购买 nike

我正在使用多个线程和 ExecutorService 来检查它们何时完成。问题是当我调用初始化 Executor 服务并执行线程的方法时(我在 onCreate() 中调用它)我在 Activity 开始时有延迟。这是我的代码:

public void test(){
ExecutorService executor = Executors.newCachedThreadPool();
executor.execute(new SomeTask());
executor.execute(new SomeTask());
executor.execute(new SomeTask());
executor.shutdown();

try{
boolean finshed = executor.awaitTermination(1, TimeUnit.MINUTES);
}
catch (InterruptedException e){e.printStackTrace();}
if (executor.isTerminated()){
Toast.makeText(AddVehicleActivity.this,"DONE",Toast.LENGTH_LONG).show();
}

}


private class SomeTask implements Runnable
{
@Override
public void run(){
final Request request = new Request.Builder()
.addHeader("Authorization",SharedPreferencesHelper.getToken())
.url("http://sapron.uveee.ru/api/vehicles/marks/get")
.build();
try{
Response response = client.newCall(request).execute();
if (!response.isSuccessful()) {
throw new IOException("Unexpected code " + response);
}else{
Gson gson = new GsonBuilder().create();
MarkResponse resp = gson.fromJson(response.body().charStream(), MarkResponse.class);

for (int i = 0;i<resp.getData().size();i++){
Log.i("SHOWVEH", "onResponse: " + resp.getData().get(i).getImg());
}
}
}catch (IOException e){
e.printStackTrace();}

}

}

请帮忙。谢谢。

最佳答案

最好为此使用 AsyncTask,这样您就不会在等待所有任务完成时阻塞 UI 线程。因为它已经有一个在 UI 线程上执行的回调方法,所以它稍微简化了一些事情。确保使用 AsyncTask.executeOnExecutor()方法,以便任务并行执行。

在每个任务完成后,您可以在 onPostExecute() 中增加一个 int 变量。一旦变量等于您需要完成的任务数,您就会知道所有任务都已完成,您可以相应地更新 Activity 中的 UI。

关于java - 使用 ExecutorService 时 Activity 滞后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35983970/

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