簡體   English   中英

使用 ExecutorService 時的活動延遲

[英]Activity lag when using ExecutorService

我正在使用多個線程和 ExecutorService 來檢查它們何時完成。問題是當我調用方法時,init Executor 服務和執行線程(我在 onCreate() 中調用它)我在活動開始時滯后。 這是我的代碼:

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變量。 一旦變量等於您需要完成的任務數,您就會知道所有任務都已完成,您可以相應地更新活動中的 UI。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM