Você pode usar a partir desta amostra:
No exemplo a seguir, usaremos esse recurso para publicar o resultado de uma pesquisa de sinônimos que foi processada por um encadeamento em segundo plano.
Para atingir a meta durante o retorno de chamada da atividade OnCreate, configuraremos onClickListener para executar searchTask em um thread criado.
Quando o usuário clica no botão Pesquisar, criaremos uma classe anônima Runnable que pesquisa a palavra digitada em R.id.wordEt EditText e inicia o thread para executar Runnable.
Quando a pesquisa for concluída, criaremos uma instância do Runnable SetSynonymResult para publicar o resultado novamente no sinônimo TextView sobre o thread da interface do usuário.
Essa técnica às vezes não é a mais conveniente, principalmente quando não temos acesso a uma instância de Activity; portanto, nos capítulos seguintes, discutiremos técnicas mais simples e limpas para atualizar a interface do usuário a partir de uma tarefa de computação em segundo plano.
public class MainActivity extends AppCompatActivity {
class SetSynonymResult implements Runnable {
String synonym;
SetSynonymResult(String synonym) {
this.synonym = synonym;
}
public void run() {
Log.d("AsyncAndroid", String.format("Sending synonym result %s on %d",
synonym, Thread.currentThread().getId()) + " !");
TextView tv = (TextView) findViewById(R.id.synonymTv);
tv.setText(this.synonym);
}
}
;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button search = (Button) findViewById(R.id.searchBut);
final EditText word = (EditText) findViewById(R.id.wordEt);
search.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Runnable searchTask = new Runnable() {
@Override
public void run() {
String result = searchSynomim(word.getText().toString());
Log.d("AsyncAndroid", String.format("Searching for synonym for %s on %s",
word.getText(), Thread.currentThread().getName()));
runOnUiThread(new SetSynonymResult(result));
}
};
Thread thread = new Thread(searchTask);
thread.start();
}
});
}
static int i = 0;
String searchSynomim(String word) {
return ++i % 2 == 0 ? "fake" : "mock";
}
}
Fonte :
programação android assíncrona Helder Vasconcelos