Archive for the ‘arquiteturas’ Category

O Android não é multi-tarefa ?

1 de maio de 2010

Hilton Garcia Fernandes

A 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 iPhone

Em 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 smartphones

Um 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 smartphones

O 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ão

Portanto, 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] Android
https://secure.wikimedia.org/wikipedia/pt/wiki/Android
Visitado em 30/04/2010

[2] iPhone
https://secure.wikimedia.org/wikipedia/pt/wiki/iPhone
Visitado em 30/04/2010

[3] Hoax
https://secure.wikimedia.org/wikipedia/pt/wiki/Hoax
Visitado em 30/04/2010

[4] Estado da arte
https://secure.wikimedia.org/wikipedia/pt/wiki/Estado_da_arte
Visitado em 30/04/2010

[5] GNU/Linux
https://secure.wikimedia.org/wikipedia/pt/wiki/Gnu/linux
Visitado em 30/04/2010

[6] Multi-tarefa
https://secure.wikimedia.org/wikipedia/pt/wiki/Multi-tarefa
Visitado em 30/04/2010

[7] iPhone OS
https://secure.wikimedia.org/wikipedia/en/wiki/IPhone_OS
Visitado em 30/04/2010

[8] Mac OS X
https://secure.wikimedia.org/wikipedia/pt/wiki/Mac_OS_X
Visitado em 30/04/2010

[9] Windows 7
https://secure.wikimedia.org/wikipedia/en/wiki/Windows_7
Visitado em 30/04/2010

[10] Windows Server 2008
https://secure.wikimedia.org/wikipedia/en/wiki/Windows_Server_2008
Visitado em 30/04/2010

[11] Mac OS X
https://secure.wikimedia.org/wikipedia/pt/wiki/Mac_OS_X
Visitado em 30/04/2010

[12] Why don’t the iPad and iPhone support multitasking
http://blog.rlove.org/2010/04/why-ipad-and-iphone-dont-support.html
Visitado em 30/04/2010

[13] Robert Love — A blog on economics, technology, and wolves
http://blog.rlove.org/
Visitado em 30/04/2010

[14] Multitasking the Android Way
http://android-developers.blogspot.com/2010/04/multitasking-android-way.html
Visitado em 30/04/2010

[15] Dianne’s Home Page
http://www.angryredplanet.com/~hackbod/
Visitado em 30/04/2010

[16] Yet Another Asterisk Tutorial
https://tecnologiassemfio.wordpress.com/2010/03/19/yet-another-asterisk-tutorial/
Visitado em 30/04/2010

[17] O que é Traffic shaping, afinal?
https://tecnologiassemfio.wordpress.com/2010/02/26/o-que-e-traffic-shaping-afinal/
Visitado em 30/04/2010

[18] Memória Virtual
https://secure.wikimedia.org/wikipedia/pt/wiki/Mem%C3%B3ria_virtual
Visitado em 30/04/2010

[19] Serialização
https://secure.wikimedia.org/wikipedia/pt/wiki/Serializa%C3%A7%C3%A3o
Visitado em 30/04/2010

[20] Bundle | Android Developers
http://developer.android.com/reference/android/os/Bundle.html
Visitado em 30/04/2010

Licença Creative Commons
Esta obra foi licenciada com uma Licença Creative Commons – Atribuição – Partilha nos Mesmos Termos 3.0 Não Adaptada.