Note that there are some explanatory texts on larger screens.

plurals
  1. POAndroid parallel (simultaneous) images download
    primarykey
    data
    text
    <p>Guys help please it's important.</p> <p>I need to download about 2000 images in less than 5 minutes. So I decided to make parallel image downloading.</p> <p>If someone can suggest me better way to do parallel downloads or told me where I'm going wrong, I'd really appreciate that.</p> <p>In error log number of completed tasks is always various...</p> <p>Help please.</p> <p>I'm using Async task Executor by Artem Zinnatullin </p> <pre><code>public class AsyncTaskExecutor { private static final int CORE_POOL_SIZE; private static final int MAXIMUM_POOL_SIZE; private static final int KEEP_ALIVE; private static final TimeUnit TIME_UNIT; private static final BlockingQueue&lt;Runnable&gt; concurrentPoolWorkQueue; private static final ThreadFactory concurrentThreadFactory; private static final ThreadPoolExecutor concurrentExecutor; private AsyncTaskExecutor() {} static { CORE_POOL_SIZE = 5; MAXIMUM_POOL_SIZE = 128; KEEP_ALIVE = 1; TIME_UNIT = TimeUnit.SECONDS; concurrentPoolWorkQueue = new LinkedBlockingQueue&lt;Runnable&gt;(10); concurrentThreadFactory = new AsyncTaskThreadFactory(); concurrentExecutor = new ThreadPoolExecutor(CORE_POOL_SIZE,MAXIMUM_POOL_SIZE, KEEP_ALIVE, TIME_UNIT, concurrentPoolWorkQueue, concurrentThreadFactory); } /** * Concurrently executes AsyncTask on any Android version * @param task to execute * @param params for task * @return executing AsyncTask */ @SuppressLint("NewApi") public static &lt;Params, Progress, Result&gt; AsyncTask&lt;Params, Progress, Result&gt; executeConcurrently(AsyncTask&lt;Params, Progress, Result&gt; task, Params... params) { if (Build.VERSION.SDK_INT &gt;= Build.VERSION_CODES.HONEYCOMB) { task.executeOnExecutor(concurrentExecutor, params); } else { task.execute(params); } return task; } /** * Thread factory for AsyncTaskExecutor * @author Artem Zinnatullin * */ private static class AsyncTaskThreadFactory implements ThreadFactory { private final AtomicInteger count; { count = new AtomicInteger(1); } @Override public Thread newThread(Runnable r) { return new Thread(r, "AsyncTask #" + count.getAndIncrement()); } } </code></pre> <p>}</p> <p>Then I'm using loop to download all my images.</p> <pre><code>for (PhotoToDBHelper photoToDBHelper : notDownloaded) { try { photoToDBHelper.download(m_context); } catch (Exception e) { // TODO: handle exception } } </code></pre> <p>where download method look like this:</p> <pre><code>public void download(Context context) throws Exception { HttpClient httpClient = new DefaultHttpClient(); HttpGet httpGet = new HttpGet(new URL(getPhotosUrl() + m_fileName).toString()); HttpResponse response = httpClient.execute(httpGet); HttpEntity entity = response.getEntity(); InputStream inputStream = entity.getContent(); filePath = Environment.getExternalStorageDirectory().toString() + getFoldeRelativePath() + m_fileName; Utils.createFileOnExternalStorage(getFoldeRelativePath(), filePath); FileOutputStream fos = new FileOutputStream(filePath, false); byte[] buffer = new byte[20000]; int byteRead = 0; while ((byteRead = inputStream.read(buffer)) != -1) { fos.write(buffer, 0, byteRead); } fos.close(); } </code></pre> <p>And when start my android application I am getting this error</p> <pre><code>02-25 01:08:30.133: E/AndroidRuntime(32357): FATAL EXCEPTION: main 02-25 01:08:30.133: E/AndroidRuntime(32357): java.lang.RuntimeException: Unable to start activity ComponentInfo{"package".TabHostActivity}: java.util.concurrent.RejectedExecutionException: Task android.os.AsyncTask$3@2c0809b0 rejected from java.util.concurrent.ThreadPoolExecutor@2be18f48[Running, pool size = 128, active threads = 1, queued tasks = 10, completed tasks = 27] 02-25 01:08:30.133: E/AndroidRuntime(32357): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1967) 02-25 01:08:30.133: E/AndroidRuntime(32357): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1992) 02-25 01:08:30.133: E/AndroidRuntime(32357): at android.app.ActivityThread.access$600(ActivityThread.java:127) 02-25 01:08:30.133: E/AndroidRuntime(32357): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1158) 02-25 01:08:30.133: E/AndroidRuntime(32357): at android.os.Handler.dispatchMessage(Handler.java:99) 02-25 01:08:30.133: E/AndroidRuntime(32357): at android.os.Looper.loop(Looper.java:137) 02-25 01:08:30.133: E/AndroidRuntime(32357): at android.app.ActivityThread.main(ActivityThread.java:4441) 02-25 01:08:30.133: E/AndroidRuntime(32357): at java.lang.reflect.Method.invokeNative(Native Method) 02-25 01:08:30.133: E/AndroidRuntime(32357): at java.lang.reflect.Method.invoke(Method.java:511) 02-25 01:08:30.133: E/AndroidRuntime(32357): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 02-25 01:08:30.133: E/AndroidRuntime(32357): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 02-25 01:08:30.133: E/AndroidRuntime(32357): at dalvik.system.NativeStart.main(Native Method) 02-25 01:08:30.133: E/AndroidRuntime(32357): Caused by: java.util.concurrent.RejectedExecutionException: Task android.os.AsyncTask$3@2c0809b0 rejected from java.util.concurrent.ThreadPoolExecutor@2be18f48[Running, pool size = 128, active threads = 1, queued tasks = 10, completed tasks = 1032] 02-25 01:08:30.133: E/AndroidRuntime(32357): at java.util.concurrent.ThreadPoolExecutor$AbortPolicy.rejectedExecution(ThreadPoolExecutor.java:1967) 02-25 01:08:30.133: E/AndroidRuntime(32357): at java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:782) 02-25 01:08:30.133: E/AndroidRuntime(32357): at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1303) 02-25 01:08:30.133: E/AndroidRuntime(32357): at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:564) 02-25 01:08:30.133: E/AndroidRuntime(32357): at "package".data.AsyncTaskExecutor.executeConcurrently(AsyncTaskExecutor.java:58) 02-25 01:08:30.133: E/AndroidRuntime(32357): at "package".TabHostActivity.checkUpdateState(TabHostActivity.java:130) 02-25 01:08:30.133: E/AndroidRuntime(32357): at "package".TabHostActivity.onCreate(TabHostActivity.java:88) 02-25 01:08:30.133: E/AndroidRuntime(32357): at android.app.Activity.performCreate(Activity.java:4465) 02-25 01:08:30.133: E/AndroidRuntime(32357): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049) 02-25 01:08:30.133: E/AndroidRuntime(32357): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1931) 02-25 01:08:30.133: E/AndroidRuntime(32357): ... 11 more </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload