[ DICA ] – Android – Cuidado com o que você considera Thread Safe

Há algum tempo atrás na empresa onde eu trabalhava passamos por um problema, ao entrar em uma certa funcionalidade de nossa aplicação aparecia a seguinte mensagem no aparelho Samsung Galaxy Mini S5570: Android: android.view.InflateException: Binary XML file line #13: Error inflating class .

android-bug

Foi um erro difícil de encontrar a causa, pois no aparelho que desenvolvíamos (LG Optimus Black), tudo rodava normalmente, sem mensagens de erro. Para reproduzirmos a falha em desenvolvimento foi necessário solicitar ao cliente que nos enviasse o Galaxy Mini, o que não é tão comum e  não tão bem visto pelos clientes.

Com o device em mãos começamos os testes, uma vez com o erro reproduzido conseguimos o stacktrace da Exception, que não foi suficiente para a resolução do problema. Após pesquisas na internet meu companheiro de equipe encontrou esse tópico no stackoverflow  http://stackoverflow.com/questions/6691311/inflate-a-view-in-a-background-thread , o qual reportava um problema ao inflar views dentro de background threads. Com isso em mãos “caiu a ficha” do que realmente a documentação do Android diz a respeito de trabalhar com views.

Até então a nossa “interpretação” era, podemos criar views em threads secundárias, mas não podemos adicionar as mesmas em layouts na activity, para isso utlizavamos o método onPostExecute ou um handler mesmo. Isso funcionou em muitos aparelhos porém como estavamos interpretando errado a lei de murphy se concretizou e começou a dar problema…

A lição aprendida foi que não é seguro trabalhar com views em threads secundárias, ou seja, não crie, adicione ou altere qualquer estado de uma views através de threads secundárias…. Nem mesmo chamar o setText =D
Porque se existe a chance de dar problema, tenha certeza que dará em produção o que é pior….

Para evitar problemas nada deve ficar subentendido.

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>