Enviando contexto de aplicativo para asynctask

Um tempo atrás (ontem) encontrei um problema que parecia bastante fácil:

Enviando o contexto da minha atividade para uma asynctask, a fim de preencher um item ListView no fundo da minha atividade; meu primeiro código parecia com este:

public class AndroidTabActivity extends ListActivity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView
(R.layout.listlayout);
new myAsyncTaskChildclass().execute("handsome String argument")
}

E então tentei definir o adaptador de lista da minha atividade de dentro do thread AsyncTask, assim:

protected void onPostExecute(String someJsonFileConsumedtoString){
setListAdapter
(new ChildOfBaseAdapter(this, mList);
}

É preciso dizer que enviar o contexto da classe AsyncTask não deu nada além de um monte de erros. Eu rapidamente mudei o argumento para getApplicationContext () para ficar assim:

protected void onPostExecute(String someJsonFileConsumedtoString){
setListAdapter
(new ChildOfBaseAdapter(getApplicationContext(), mList);
}

O layout estava exibindo o conteúdo muito bem, como meu aplicativo era um feed do Twitter, decidi tornar os links clicáveis, dando ao meu textview uma propriedade de autolink habilitada no arquivo .xml do layout (tarefa bastante fácil: http://stackoverflow.com / questions / 18222433 / how-to-make-links-in-textview-clickable-in-android )

Mas meu aplicativo travava sempre que eu clicava em qualquer URL do feeder, depois de algumas pesquisas, a solução era fácil de implementar, mas difícil de notar:

getApplicationContext não pode ser usado posteriormente para ouvir as ações da visualização, pois fornece o controle do aplicativo como um todo, mas não pode manipular chamadas de atividades únicas; autolink por exemplo

A solução final foi definir um construtor na classe AsyncTask, enviando a atividade como um argumento a fim de enviar essa atividade específica para o adaptador e tornando-o capaz de abrir o navegador em cada um dos links que podem ser clicados.

Código da solução da seguinte forma:

public DownloadTweetsTask(ListActivity activity) {
this.activity = activity;
}

protected String doInBackground(String... searchName) { ... }

protected void onPostExecute(String result){
activity
.setListAdapter(new ChildOfBaseAdapter(activity, mList);
}

E no onCreate () de sua atividade apenas chame o objeto AsyncTask com a atividade como argumento.

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView
(R.layout.listlayout);
new myAsyncTaskChild(this).execute("handsome String argument")
}