O AsyncTask doInBackground não é executado [duplicado]

Esta pergunta já tem uma resposta aqui:

O SDK do Android AsyncTask doInBackground não está em execução (subclasse) 9 respostas

Estou tendo um problema com a classe AsyncTask. Parece que minha tarefa para de funcionar depois de criar 4 ou 5 tarefas.

Estou tendo 2 atividades. MainActivity, que contém apenas um botão que inicia uma segunda atividade chamada ImageActivity.

ImageActivity é muito simples. ele recebeu um onCreate que define o layout e inicia um novo AsyncTask que carrega uma imagem da Internet. Isso funciona bem nas primeiras vezes. Mas, de repente, ele para de funcionar. O método onPreExecute é executado sempre, mas não o método doInBackground. Eu tentei simplificar o doInBackground com um loop adormecido, e a mesma coisa acontece. Não consigo entender esse comportamento, pois a asynctask é cancelada e definida como nula no método onDestroy. Portanto, toda vez que inicio uma nova ImageActivity, também crio uma nova AsyncTask.

Recrio a ImageActivity e a tarefa pressionando o botão Voltar e, em seguida, clicando no botão na MainActivity.

Alguma idéia para alguém? Estou realmente lutando com este.

UPDATE: código que inicia o ImageActivity (dentro de um botão noClickListener)

Intent intent = new Intent();
intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
intent.setClassName(this, ImageActivity.class.getName());
startActivity(intent);

O código acima inicia esta atividade

    public class ImageActivity extends Activity {

    private AsyncTask<Void, Void, Void> task;

    public void onCreate(Bundle bundle) {
        super.onCreate(bundle);
        setContentView(R.layout.main);

        task = new AsyncTask<Void, Void, Void>() {

            @Override
            protected void onPreExecute()
            {
                Log.d(TAG, "onPreExecute()");
            }

            @Override
            protected Void doInBackground(Void... params)
            {
                Log.d(TAG, "doInBackground() -- Here is the download");
                // downloadBitmap("http://mydomain.com/image.jpg")
                return null;
            }

            @Override
            protected void onPostExecute(Void res)
            {
                Log.d(TAG, "onPostExecute()");
                if(isCancelled()){
                    return;
                }
            }
        }.execute();
    }

    @Override
    protected void onDestroy()
    {
        super.onDestroy();
        task.cancel(true);
    }
}

ATUALIZAR:

Eu testei usando uma combinação de Threads tradicionais e o método runOnUiThread, e parece funcionar melhor. Agora o thread é executado sempre.

questionAnswers(7)

yourAnswerToTheQuestion