Огромная задержка между onPreExecute и doInBackground в AsyncTask

У меня есть AsynkTask:

new AsyncTask<Void, Void, Void>() {

            private ProgressDialog mProgressDialog;

            @Override
            protected void onPreExecute() {
                Log.i(TAG, "Pre execute: " + System.currentTimeMillis());
                super.onPreExecute();

                mProgressDialog = ProgressDialog.show(NewWeatherActivity.this, null,
                        getResources().getString(R.string.weather_is_updating));
                mProgressDialog.setCancelable(false);

                Log.i(TAG, "Pre executed: " + System.currentTimeMillis());
            }

            @Override
            protected Void doInBackground(Void... voids) {
                Log.i(TAG, "Do in background: " + System.currentTimeMillis());
                // Some actions
                Log.i(TAG, "Done in background: " + System.currentTimeMillis());
                return null;
            }

            @Override
            protected void onPostExecute(Void aVoid) {
                Log.i(TAG, "Post execute: " + System.currentTimeMillis());
                super.onPostExecute(aVoid);

                mProgressDialog.dismiss();
                Log.i(TAG, "Post executed: " + System.currentTimeMillis());
            }
        }.execute();

Log:

I / TVLauncher / NewWeatherActivity(21691): предварительно выполнить: 1354798705667 I / TVLauncher / NewWeatherActivity (21691): предварительно выполнено: 1354798705713 I / TVLauncher / NewWeatherActivity (21691): сделать в фоновом режиме: 1354798724063 I / TVLauncher / NewWeatherActivity (21691): Сделано в справочная информация: 1354798724083 I / TVLauncher / NewWeatherActivity (21691): сообщение выполнить: 1354798724083 I / TVLauncher / NewWeatherActivity (21691): сообщение исполнено: 1354798725046

таким образом, задержка между onPreExecute и doInBackground составляет около 19s. Почему?

1 ответов


вероятно, вы вызываете фреймворк или некоторую библиотеку, которая также использует асинхронную задачу. Это проявится в замедлении на более поздних версиях Android.

AsyncTasks теперь выполняются последовательно. Это означает, что новая асинхронная задача не будет выполняться до тех пор, пока не будет завершена последняя. Вместо вызова execute попробуйте вызвать executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, "");

Это, вероятно, уменьшит задержку до незначительных уровней.