Background image loader AsyncTask
For starters, you should replace your Vector with an ArrayBlockingQueue .  Then you can drop the wait and the null check.  Can also then remove synchronization on the add method since its handled by the data structure.

private final BlockingQueue&lt;String&gt; pendingURLs = new ArrayBlockingQueue&lt;String&gt;(64);
protected void doInBackground(Void... params) {
    this.backgroundThread = Thread.currentThread();
    while (!backgroundThread.isInterrupted()) {
        String url = pendingURLs.take();
        // fetch image...
        publishProgress(url, fetchedBitmap); // in onProgressUpdate I call a listener that can be implemented by any Fragment or other component
    }

public void addUrl(String url) {
    pendingURLs.put(url);
}


You should probably replace it with just a new thread instead of using asynctask at all.

public class ImageLoader implements Runnable {
  private final BlockingQueue&lt;String&gt; pendingURLs = new ArrayBlockingQueue&lt;String&gt;();

  public void run() {
    while (true) {
        String url = pendingURLs.take(); 
        // fetch image...
        publishProgress(url, fetchedBitmap); // in onProgressUpdate I call a listener that can be implemented by any Fragment or other component
    }
  }

  public void addUrl(String url) {
    pendingURLs.put(url);
  }
}


Then you can create it in your initialization somewhere, ie

 ImageLoader loader = new ImageLoader();
 new Thread(loader, "BackgroundLoader").start();