我有一个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秒。为什么呢?
答案 0 :(得分:8)
您可能正在调用一个框架或某个也在使用异步任务的库。这将表现在Android更高版本的放缓。
AsyncTasks现在按顺序运行。这意味着新的异步任务在最后一个完成之前不会运行。而不是调用执行尝试调用
executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, "");
这可能会将延迟降低到可以忽略不计的水平。