2017-04-04 8 views
-1

AsyncTaskについて質問があります。私はこの同じAsyncTaskがAndroidで異なるパラメータで複数回呼び出された場合どうなりますか

next.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
       new MyAsyncTask().execute("Android"); 
new MyAsyncTask().execute("Java"); 
new MyAsyncTask().execute("Hadoop"); 
new MyAsyncTask().execute("Python"); 
new MyAsyncTask().execute("Dot Net"); 
new MyAsyncTask().execute("Hibernate"); 
     } 
    }); 

ように異なる文字列値を使用して同じAsyncTaskを呼び出していた場合、私は一つのボタンクリックを使用して、異なる値を持つ同じAsyncTaskを呼び出しています。今私の質問は、上記のコードで何が起こるのでしょうか?すべてのAsyncTaskが並行して、または順番に実行されますか?彼らはどのように並列に実行する場合?彼らはどのように順番に実行する場合?私は明確な説明をしたい。誰かが分かっているなら教えてください。

ありがとうございます。

+0

Asynctaskの使用法とその動作方法を読むことを強くお勧めします.Asynctaskはスレッド操作で動作するように設計されていますが、並列に実行できるasyntaskの数はThreadPoolSizeによって異なります。 –

+0

複数のパラメータを渡す必要がある場合は、この 'java'文字列の代わりに変数を使用し、条件の変数ベースに文字列を割り当てます。 –

答えて

1

AsyncTaskは、スレッドプールパターンを使用して、doInBackground()からスレッドを実行します。問題は当初(初期のAndroid OS版では)プールのサイズは1であったため、AsyncTasksの束の並列計算は行われませんでした。しかし、後で彼らはそれを固定し、今はサイズが5であるので、最大で5 AsyncTasksは同時に動くことができます。

リンクの下の、より詳細な情報を確認:

[同時に複数のAsyncTasksを実行する - ことができませんか?

Multiple AsyncTask In Android ] 2

スレッドプールのパターン

AsyncTaskは、スレッドの数を実行するために作成される場所doInBackground()

からスレッドプールのパターンをものを実行するためのスレッドプールのパターンが使用していますいくつかのタスク。これは、基本的に、複数のスレッドが異なるタスクのキューに入ってくるコンテナです。 Androidの(Donut and below)の以前のバージョンで

アンドロイドで複数AsyncTasks

、複数AsyncTasks実行が許可されませんでした。プールサイズはちょうど1だった。しかし、Donut (1.6)の後はリラックスしていて、今はサイズが5であるので、最大で5である。AsyncTasksは同時に動くことができる。 AsyncTask

制限を同時に実行することができますどのように多くのタスクの制限があります。 AsyncTaskは最大数のワーカースレッド(128)を持つスレッドプールエグゼキュータを使用しており、遅延タスクキューのサイズは10です。AsyncTasksを実行しようとすると、java.util.concurrent.RejectedExecutionExceptionでアプリがクラッシュします。

遅延キューサイズ

AsyncTasks遅延タスクを格納するために内部的に固定サイズのキューを使用します。キューのサイズはデフォルトで10です。 15 AsyncTasksを連続して起動すると、最初の5はdoInBackground()と入力されますが、残りは空きワーカースレッドのキューで待機します。最初の5つのうちのどれかが終了し、ワーカースレッドを解放すると、キューからのタスクが実行を開始します。この場合、最大5つのタスクが同時に実行されます。ただし、カスタムタスクを連続して16個起動すると、最初の5個はdoInBackground()、残りの10個はキューに入れられますが、16番目に新しいワーカースレッドが作成され、すぐに実行が開始されます。この場合、最大6つのタスクが同時に実行されます。

+0

okサイズが5の場合、5以上のasynctaskを実行するとどうなりますか?私は10の手段を実行している場合、最初の5は同時に実行し、次の5は同時に実行されます..私は右ですか? –

+0

次の5はキューにはありません。 –

+0

第2のリンクを読むと、「複数のAsyncTasks in Android」、「制限のAsyncTask」、「遅延キューサイズ」 –

関連する問題