6

AsyncTask があります。

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) Done91:216バックグラウンドで: 1354798724083 I/TVLauncher/NewWeatherActivity(21691): ポスト実行: 1354798724083 I/TVLauncher/NewWeatherActivity(21691): ポスト実行: 1354798725046

したがって、onPreExecute と doInBackground の間のレイテンシは約 19 秒です。なんで?

4

1 に答える 1

8

非同期タスクも使用しているフレームワークまたはライブラリを呼び出している可能性があります。これは、Android の以降のバージョンでの速度低下に現れます。

AsyncTasks が順次実行されるようになりました。つまり、最後の非同期タスクが完了するまで、新しい非同期タスクは実行されません。execute を呼び出す代わりに、呼び出してみる executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, "");

これにより、レイテンシが無視できるレベルにまで減少する可能性があります。

于 2013-05-05T16:28:48.673 に答える