O Android não é multi-tarefa ?
Autor: Hilton Garcia Fernandes | Publicado: 2010-05-03T12:13:00-07:00

Hilton Garcia FernandesA Internet é movida por ondas de informações, algumas nem sempre verdadeiras. Uma delas foi a de que o Android [1] -- que equipa celulares -- não seria um sistema operacional multi-tarefa; ou seja: não permitiria vários aplicativos operando ao mesmo tempo. Opinião semelhante tem sido lançada sobre o sistema operacional que equipa o iPhone [2].Estas notícias -- não vamos chamá-las ainda de boatos, ou  hoax [3] -- são importantes, pois se referem a dois equipamentos móveis muito importantes, basicamente no estado-da-arte [4] de sua classe. Por isso, vale a pena analisá-las em mais detalhe.Visão muito geral sobre Android e sistema operacional do iPhoneEm primeiro lugar o Android pode ser entendido como um sistema operacional Gnu/Linux [5]. Nestes sistemas, a propriedade de ser multi-tarefa [6] é realmente básica, mesmo em suas configurações mais simples. No iPhone, o sistema operacional [7] é derivado do Mac OS X  [8], que por sua vez é -- grosso modo -- um sistema operacional similar ao GNU/Linux.(Deve-se dizer que a Apple tem conseguido com essa estratégia algo que os sistemas operacionais GNU/Linux conseguiram antes: é basicamente o mesmo sistema operacional que roda desde o menor celular até o maior computador disponível -- apenas são inseridos e retirados módulos de acordo com as características de cada ambiente.O que não é conseguido no caso do Microsoft Windows, quando os ambientes para PC Desktop [9] e servidor [10] são fundamentalmente diferentes daquele para celulares smartphone [11].)Resumindo, tanto Android quanto o SO do iPhone ambos são intrinsecamente multi-tarefa. Então, será que a afirmação é apenas mais um boato sem fundamento, como muitos que passeiam pela Internet ?Limites para multi-tarefas em smartphonesUm dos melhores artigos que podem ser encontrados na Internet a esse respeito é [12], de Robert Love [13]. Neste texto, explica-se que existe, sim multi-tarefa verdadeiro no Android e no sistema operacional do iPhone. O que não há é multi-tarefa para aplicações de terceiros, não desenvolvidas pelas equipes que criaram sistemas operacionais.Quais as razões para isso ? São detalhadas em outro ótimo artigo sobre o tema [14], de Dianne Hackborn [15]. Basicamente, trata-se do problema de desempenho, comum a sistemas embarcados interativos como são os telefones celulares.Trata-se de um problema de necessidade de resposta rápida, já comentado neste blog a respeito de telefonia, comum ou VoIP, em [16] e [17]: diferente de uma leitura de e-mail, na qual dezenas de segundos não causam nenhum problema, há atividades nas quais demoras adicionais de alguns segundos podem fazer com que o usuário considere todo o aplicativo inútil.Sendo assim, uma aplicação fortemente interativa como um telefone celular sofisticado, um smartphone, é desenvolvido muito cuidadosamente para que nenhuma aplicação tenha um tempo de resposta maior do que seria razoável para um usuário. Aplicativos de terceiros poderiam, talvez prejudicar esse projeto cuidadoso.Além disso, um dispositivo móvel tem recursos limitados. Aqueles mais simples têm limites tanto de poder de processamento, quanto de armazenamento e até de bateria. Em [12], o autor é enfático em desmentir as alegações da Apple a respeito de bateria e de poder de processamento do iPhone como razão para que ela impeça que aplicações de terceiros usem a capacidade multi-tarefa disponível no sistema operacional do iPhone.A principal razão, explica ele, é a questão de um celular do tipo smartphone ter um limite de memória muito baixo para as aplicações atuais E, devido ao fato de seu armazenamento em disco ser também muito limitado, eles não podem contar com o recurso da memória virtual [18] que, no caso dos PCs, permite que aplicações inteiras sejam transferidas para o disco rígido, liberando espaço em memória para outros aplicativos.O artigo [14] lembra que o recurso de multi-tarefa não é tão crítico em um dispositivo que serve principalmente para atender a um único usuário que terá atenção focada apenas em interagir diretamente com o teclado e o monitor de seu smartphone -- na imensa maior parte do tempo.Recursos para permitir multi-tarefa em smartphonesO que o Android já pode fazer, segundo [12], é permitir que um aplicativo armazene seu estado em uma área limitada, bastante menor do que aquela de um disco rígido. Este processo, chamado de serialização em geral [19], recebe o nome de bundles, ou pacotes, no contexto do Android [20]. Em [12] se explica que mesmo a Apple está desenvolvendo formas de permitir multi-tarefa similares àquelas do Android.O recurso de serialização garante que, quando um aplicativo for novamente carregado, encontrará em alguma parte do armazenamento toda informação que ele necessita para retornar a seu estado anterior. Infelizmente, neste o processo de carregar novamente uma aplicação é algo mais demorado do que transferir uma aplicação da memória virtual para a memória física.No uso de memória virtual, tudo já está pronto -- basta transferir do disco a memória, no estado já desejado para execução. No caso da serialização, será necessário carregar novamente o aplicativo e fazê-lo executar até chegar ao estado desejado.Assim, o uso de serialização apenas pode tornar mais demoradas-- e portanto com tempo de resposta maior -- as aplicações que dela fazem uso.ConclusãoPortanto, a frase "o Android não é multi-tarefa" é parcialmente verdadeira: há multi-tarefa para aplicativos nativos nos sistemas operacionais do  iPhone e Android. Há multi-tarefa limitado para aplicativos de terceiros no Android -- chamado de serialização. Infelizmente, os limites da serialização dificultam o uso intenso por aplicativos de terceiros, que terão que ser projetados desde o início para usufruir da serialização, tão diferente daqueles disponíveis em PCs.Por isso, eventualmente, é que ainda não vê com frequência o comportamento multi-tarefa nos novos aplicativos disponíveis para smartphones.Os desenvolvedores de aplicativos de terceiros terão de se educar para projetar novos aplicativos. E mesmo a Apple terá de estudar como melhor oferecer sua forma de serialização aos programadores desenvolvendo aplicativos para iPhone.Referências[1] Androidhttps://secure.wikimedia.org/wikipedia/pt/wiki/AndroidVisitado em 30/04/2010[2] iPhonehttps://secure.wikimedia.org/wikipedia/pt/wiki/iPhoneVisitado em 30/04/2010[3] Hoaxhttps://secure.wikimedia.org/wikipedia/pt/wiki/HoaxVisitado em 30/04/2010[4] Estado da artehttps://secure.wikimedia.org/wikipedia/pt/wiki/Estado_da_arteVisitado em 30/04/2010[5] GNU/Linuxhttps://secure.wikimedia.org/wikipedia/pt/wiki/Gnu/linuxVisitado em 30/04/2010[6] Multi-tarefahttps://secure.wikimedia.org/wikipedia/pt/wiki/Multi-tarefaVisitado em 30/04/2010[7] iPhone OShttps://secure.wikimedia.org/wikipedia/en/wiki/IPhone_OSVisitado em 30/04/2010[8] Mac OS Xhttps://secure.wikimedia.org/wikipedia/pt/wiki/Mac_OS_XVisitado em 30/04/2010[9] Windows 7https://secure.wikimedia.org/wikipedia/en/wiki/Windows_7Visitado em 30/04/2010[10] Windows Server 2008https://secure.wikimedia.org/wikipedia/en/wiki/Windows_Server_2008Visitado em 30/04/2010[11] Mac OS Xhttps://secure.wikimedia.org/wikipedia/pt/wiki/Mac_OS_XVisitado em 30/04/2010[12] Why don't the iPad and iPhone support multitaskinghttp://blog.rlove.org/2010/04/why-ipad-and-iphone-dont-support.htmlVisitado em 30/04/2010[13] Robert Love -- A blog on economics, technology, and wolveshttp://blog.rlove.org/Visitado em 30/04/2010[14] Multitasking the Android Wayhttp://android-developers.blogspot.com/2010/04/multitasking-android-way.htmlVisitado em 30/04/2010[15] Dianne's Home Pagehttp://www.angryredplanet.com/~hackbod/Visitado em 30/04/2010[16] Yet Another Asterisk Tutorialhttp://tecnologiassemfio.blogspot.com/2010/03/yet-another-asterisk-tutorial.htmlVisitado em 30/04/2010[17] O que é  Traffic shaping, afinal?http://tecnologiassemfio.blogspot.com/2010/03/o-que-e-traffic-shaping-afinal.htmlVisitado em 30/04/2010[18] Memória Virtualhttps://secure.wikimedia.org/wikipedia/pt/wiki/Mem%C3%B3ria_virtualVisitado em 30/04/2010[19] Serializaçãohttps://secure.wikimedia.org/wikipedia/pt/wiki/Serializa%C3%A7%C3%A3oVisitado em 30/04/2010[20] Bundle | Android Developershttp://developer.android.com/reference/android/os/Bundle.htmlVisitado em 30/04/2010