Escolar Documentos
Profissional Documentos
Cultura Documentos
Worker thread
Com o modelo de thread nica mostrada acima, vital que a responsividade de sua interface de
aplicao no bloqueie a UI Thread. Se as operaes que so realizadas no so instantneas
ento voc deve se certificar de cri-las em threads separadas (threads backgroud ou worker
threads).
Por exemplo, abaixo est um cdigo de um listener click que faz o download de uma imagem em
uma thread separada e a mostra dentro de um ImageView:
Inicialmente, parece ser um cdigo perfeito, j que ele cria uma nova thread e manuseia a
operao de rede. No entanto, ele viola a segunda regra do modelo de thread nica: no acessar
a toolkit de interface do Android de fora da UI Thread. Esse exemplo modifica um ImageView a
partir de um Worker Thread ao invs da UI Thread.
Para corrigir esse problema, o Android oferece diversas maneiras de acessar a UI Thread de
outras threads. Aqui a lista de alguns mtodos que podem ajud-lo nessa tarefa:
Activity.runOnUiThread(Runnable)
View.post(Runnable)
View.postDelayed(Runnable, long)
Por exemplo, voc poder corrigir o cdigo acima usando o mtodo View.post(Runnable):
Agora sua implementao est em modo thread-safe: a operao de rede realizada em uma
thread separada enquanto a ImageView manipulada pela UI Thread.
Iremos construir um exemplo bem simples onde realizado o download de uma imagem, o
sistema exibe uma mensagem para o usurio durante o download e a imagem exibida ao
trmino do processo.
try {
// Faz o download da imagem
URL url = new URL(urlImg);
InputStream imputStream = url.openStream();