AsyncTask中onPreExecute和doInBackground之间的延迟很大

时间:2012-12-06 13:24:57

标签: android multithreading android-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();

日志:

  

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之间的延迟大约是19秒。为什么呢?

1 个答案:

答案 0 :(得分:8)

您可能正在调用一个框架或某个也在使用异步任务的库。这将表现在Android更高版本的放缓。

AsyncTasks现在按顺序运行。这意味着新的异步任务在最后一个完成之前不会运行。而不是调用执行尝试调用 executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, "");

这可能会将延迟降低到可以忽略不计的水平。