したがって、AsyncTask内に以下のコードがあり、7つの異なる非同期HTTPリクエストを呼び出したいと思います。すべてがうまく機能し、7つのexecute()メソッドすべてが同時に開始します(数ミリかかるので、これは素晴らしいことです)。
残念ながら、この方法にかかる時間はおよそです。16秒 すべてのエグゼキュータのものを除外し、元のワーカーAsynctaskでHTTPダウンロードメソッドを呼び出すと、約がかかります。9秒 そのため、実際には、同時ではなく順次の方が時間がかかりません。なぜこれが起こっているのか考えはありますか?たぶんサーバー側に何かありますか?おそらく、エグゼキュータが非同期タスクで開始されたためですか?どうもありがとう !
MyExecutor executor = new MyExecutor(7, 7, 40000, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>());
executor.execute(new Runnable()
{
@Override
public void run()
{
try {downloadSplashScreenJsonData();}
catch (Exception e)
{
Log.e(TAG, "Could not download splashscreen data.");
e.printStackTrace();
}
}
});
// after another 6 executor.execute() calls,
executor.shutdown();
executor.awaitTermination(40000, TimeUnit.MILLISECONDS);
class MyExecutor extends ThreadPoolExecutor
{
public MyExecutor(int corePoolSize, int maximumPoolSize,
long keepAliveTime, TimeUnit unit,
BlockingQueue<Runnable> workQueue) {
super(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue);
prestartAllCoreThreads();
// TODO Auto-generated constructor stub
}
@Override
public void execute(Runnable command) {
super.execute(command);
Log.e(TAG, "execute()");
Log.e(TAG, "no of thr: " + getActiveCount());
}
}