[Android] - Thread com acesso à Views da Activity

Opa,

estou com um problema e não encontrei muita referencia no Google…

Preciso criar um relatório com os dados de um cursor, como esse processo pode demorar alguns segundos, quero exibir um ProgressDialog.


private void btnCriaRelatorioClick(){
		final ProgressDialog dialog = new ProgressDialog(this);
		
		dialog.setIndeterminate(true);
		dialog.setMessage("Aguarde . . . ");
		
		dialog.show();
		
		Runnable runnable = new Runnable() {
			@Override
			public void run() {
				criaRelatorio();
				handler.sendEmptyMessage(0);
			}
		};
		
		handler = new Handler(){
		    @Override
            public void handleMessage(Message msg) {
		    	dialog.dismiss();
		    }};	
		
		runOnUiThread(runnable);
		

		
        Thread thread = new Thread(runnable);
         thread.start();
	}

O problema é que o metódo criaRelatorio() acessa TextViews da Tela, alterando seus textos ou visibildade.


private criaRelatorio(){
    ...

    
    if(codicao){
          //erro
          meuTextView.setVisibility(View.GONE);
    }
}

Queria saber o motivo do erro?? Porque somente a thread principal pode acessas objetos de UI?

E qual a melhor forma de implementar??

Valeuu

Acabei de achar uma página que parece boa:

http://www.vogella.de/articles/AndroidPerformance/article.html

Acho q consigo solução nela, enquanto isso, fica aberto aqui :smiley:

Não quero discutir os motivos pelo qual somente a UI Thread pode modificar a UI (Não só no Android).

Mas no caso de Android, voce tem um Handler que voce envia mensagens para a Thread principal e executa o codigo como se fosse nela.