4

多くの AsyncTasks を使用するアプリケーションがあります。私が抱えている問題は、execute を呼び出してから数分間、特に重要なタスクが開始されないことです。

ICS デバイスに以下を使用すると動作します。

if(Build.VERSION.SDK_INT >= 11)
{
  myTask.executeOnExecutor( AsyncTask.THREAD_POOL_EXECUTOR, stuff );
}

ICS以前のこれとは対照的に。

myTask.execute(stuff);

ICS がスレッドの実行をシリアル化するように変更したことは承知していますが、何がスレッド キューを保持しているのかわかりません。

Eclipse のデバッグには約 20 のスレッドがリストされていますが、デバッガーは実際には存在しないものを表示し続ける傾向があるため、おそらくこれは正しくないことを読みました。

シリアル化されたキューを保持しているスレッドを特定するにはどうすればよいので、ICS のデフォルトから切り替える必要がなく、おそらく、スレッド プール エグゼキューターによる問題が発生していない ICS 以前のデバイスのパフォーマンスを向上させることさえできます。デフォルトの動作です。

4

1 に答える 1

3

シリアル化されたキューを保持しているスレッドを特定するにはどうすればよいですか

関連するメソッドLogの開始と終了を追跡するステートメントを追加します。doInBackground()

また、スレッドプールエグゼキュータがデフォルトの動作であるために問題が発生しないプレICSデバイスのパフォーマンスを改善することもできます。

を使用する必要はありませんAsyncTask。独自のスレッドをフォークrunOnUiThread()して、メインのアプリケーションスレッドでロジックを実行する手段としてのようなものを使用するだけです。AsyncTask便利であり、要件ではありません。また、外れ値の優先度の高いタスクの場合は、スレッドプールの競合から単純に遠ざける方が理にかなっている場合があります。

または、クローンを作成してフォークAsyncTaskし、を使用してPriorityQueue、優先度の高いタスクを明示的に指定できるようにします。

于 2012-06-12T17:15:09.647 に答える