Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <pre><code>public final class DownloadThread extends Thread { private static final String TAG = DownloadThread.class.getSimpleName(); private Handler handler; private int totalQueued; private int totalCompleted; private final DownloadThreadListener listener; private boolean isRunning = false; protected boolean isStop; private TaskInitiator mtaskInitiator = null; /** * @return the isRunning */ public boolean isRunning() { return isRunning; } public DownloadThread(DownloadThreadListener listener) { this.listener = listener; isStop = false; } @Override public void run() { try { Looper.prepare(); mtaskInitiator = new TaskInitiator(); handler = new Handler(); isRunning = true; Looper.loop(); } catch (Throwable t) { Log.e(TAG, "DownloadThread halted due to an error", t); } } public synchronized void requestStop() { isStop = true; } public synchronized void enqueueDownload(DownloadTask task) { mtaskInitiator = new TaskInitiator(); mtaskInitiator.setTask(task); handler.post(mtaskInitiator); totalQueued++; } public synchronized void removeTasks() { if (mtaskInitiator != null) { handler.removeCallbacks(mtaskInitiator); totalQueued = 0; totalCompleted = 0; } } class TaskInitiator implements Runnable { private DownloadTask task = null; public DownloadTask getTask() { return task; } public void setTask(DownloadTask task) { this.task = task; } public TaskInitiator() { // TODO Auto-generated constructor stub } @Override public void run() { try { task.run(); } finally { if (isStop) { Looper.myLooper().quit(); } synchronized (DownloadThread.this) { signalUpdate(task.getCurrentBitmap(), task.getCurrentFeedUrl()); task.setCurrentBitmap(null); totalCompleted++; } } } } public synchronized int getTotalQueued() { return totalQueued; } public synchronized int getTotalCompleted() { return totalCompleted; } public void signalUpdate(Bitmap bmap, String bmapUrl) { if (listener != null) { listener.handleDownloadThreadUpdate(bmap, bmapUrl); } } } </code></pre> <p>And let your Activity component implement the below interface for callback from Thread class.</p> <pre><code>public interface DownloadThreadListener { void handleDownloadThreadUpdate(Bitmap bmap,String bmapUrl); Map&lt;String, Bitmap&gt; giveImages_Map(); ConcurrentHashMap&lt;String, SoftReference&lt;Bitmap&gt;&gt; giveSoftImages_Map(); </code></pre> <p>}</p>
    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