Android Oreo — os poderes e as limitações do novo herói

Há exactamente um ano atrás, a Google começou a distribuir o Android Nougat, e ontem (21 de Agosto de 2017) a empresa do “grande G” anunciou o nome do seu novo sistema operativo: Android Oreo 8.0 (API 26). Vamos então olhar para algumas das novas funcionalidades da “bolachinha robótica”.

Tal como no artigo do Nougat (https://medium.com/android-dev-moz/android-nougat-desenvolver-apps-tendo-em-conta-as-novas-funcionalidades-7f85bb8b789), não podia deixar de publicar os novos emojis.

Apesar de trazer novos super-poderes, algo preocupou-me um pouco ao ver a lista de novas funcionalidades: novas restrições e limitações de aplicações a serem executadas no background (eis a razão do título do artigo). Então vamos olhar para esta parte primeiro.

Restrições de apps em segundo plano

Services

Então, como iremos notificar os utilizadores sobre novidades na aplicação?

Existem 3 substitutos para os Background Services:

  1. Jobs — Diferentemente dos Services, Jobs são como se fossem minions que têm uma vida muito simples: acordam quando são chamados, fazem um trabalho e voltam a dormir. Vamos tentar perceber melhor isto: Os Jobs não estão sempre no background. Eles são agendados, ou seja, quando chega uma altura definida por nós eles são activos, fazem o seu trabalho e terminam o seu ciclo de vida. Para agendar estes Jobs podemos utilizar o FirebaseJobDispatcher ou a classe JobIntentService (substituto do IntentService).
  2. Carta branca — Em alguns momentos, a aplicação pode receber carta branca e estar livre para executar Services (por um pequeno período de tempo), como por exemplo: ao receber uma mensagem de alta prioridade do FCM, ao receber um broadcast de SMS/MMS, ou quando utilizador clicar numa notificação e um PendingIntent for invocado.
  3. Foreground Services — Se a app não pode estar no background, deixemos ela no foreground mesmo. Foreground Services são executados com o conhecimento do utilizador. Mesmo que a aplicação não esteja aberta, haverá uma notificação no ecrã indicando o que está a acontecer. Como por exemplo, se houver um cronômetro a correr:
Fonte: https://www.youtube.com/watch?v=Pumf_4yjTMc

Broadcasts

Para substituir os Broadcasts que não estão na lista de excepções, temos de recorrer mais uma vez ao grande vilão dos BackgroundServices: Jobs. Jobs podem ser acordados(invocados) por evento externo (tal como os broadcasts), como por exemplo: quando existem alterações na conectividade do dispositivo, quando o carregador é ligado, quando um ContentProvider de outra aplicação é alterado, etc.

Além dos Jobs, outra solução seria activar os Broadcasts dinamicamente no código.

Location

Melhorias na Experiência do Utilizador

Notificações

  • Notification Channels — agora o utilizador pode decidir um grupo de notificações de uma aplicação ele quer receber. Então nós, desenvolvedores, temos de definir esse grupo, ou seja, definir os canais(categorias) de notificação que a nossa app suporta.
  • Notifications Dots — agora podemos mostrar ao utilizador que a nossa app tem notificações através de um ponto ou distintivo que fica por cima do ícone da aplicação. A vantagem de utilizar estes pontinhos é que eles continuarão lá para lembrar ao utilizador que a notificação existe, mesmo que ele tenha limpado a notificação da zona de notificações.
Fonte: https://developer.android.com/guide/topics/ui/notifiers/notifications.html
  • Cores das notificações — a partir do Oreo, é possível definir uma cor de fundo diferente para cada notificação. Nota: esta cor não serve para diferenciar as cores de uma aplicação para outra, mas sim para indicar que uma notificação é de extrema importância, como por exemplo quando há uma vídeo-chamada em progresso.
  • Limpar notificações — além de limpar as notificações, os utilizadores podem também suspender notificações para que elas voltem depois de um tempo determinado. Além disso, nós desenvolvedores, podemos detectar quando um utilizador limpa a notificação. Basta utilizar o método onNotificationRemoved() da classe NotificationListenerService .

Textos

  • O EditText agora conta com a funcionalidade de autofill (preenchimento automático). Isto não requer nenhuma programação adicionar (excepto em casos como o autofill obrigatório ou numa CustomView), mas podemos definir quais EditTexts não necessitam de auto-fill (android:importantForAutofill=”no”) ou dar dicas sobre quais dados devem estar no EditText: (android:autofillHints=”postalAddress”).
  • Creio que todos nós já estavamos a espera desta: O tamanho do texto em TextViews agora ajusta-se automaticamente de acordo com o tamanho da TextView. Para isso basta utilizarmos um atributo da supportLibrary no TextView: app:autoSizeTextType=”uniform”. Veja mais detalhes aqui.
  • Fontes agora podem ser definidas em ficheiros XML, o que significa que já não é necessário colocá-las no directório dos assets. Mas incluir fontes nas nossas apps gera um apk “gordinho”. Para “emagrecer” o nosso apk, foram introduzidas também as fontes descarregáveis — permite que as nossas aplicações utilizem fontes que já foram descarregadas e instaladas no dispositivo Android.

Ecrã

<activity

android:resizeableActivity=”false”
android:maxAspectRatio=”1.86"
/>

E depois de terem introduzido o modo multi-janela no Android Nougat e Picture-in-picture para Android TV, a equipa do “robô verde” trouxe agora o Picture-in-picture para os telemóveis também:

Fonte: https://www.youtube.com/watch?v=7kD0ZYzJbYo

Espero que você tenha gostado de conhecer estas novas funcionalidades. Atenção que mesmo que você ainda não tenha a API 26 como a targetSDK, se a sua aplicação for executada num dispositivo com Android Oreo, ela sofrerá as restrições de segundo plano. Por isso, esteja preparado para adaptá-la.

Tem alguma funcionalidade do Android Oreo que você gostou e que eu não citei aqui? Deixe um comentário abaixo.


Se você tem alguma dúvida ou sugestão, não hesite em me contactar pelo email rosariofernandes51@gmail.com ou pelo Telegram. Ficarei feliz por conversar com você. 🙂

GDG Maputo

Artigos em português, escritos pela comunidade GDG Maputo. Faça parte da nossa comunidade: https://www.meetup.com/GDG-Maputo/

)

Rosário Pereira Fernandes

Written by

Firebase App Developer from Mozambique | Writes about Google Technologies | Organizer @ GDG Maputo

GDG Maputo

Artigos em português, escritos pela comunidade GDG Maputo. Faça parte da nossa comunidade: https://www.meetup.com/GDG-Maputo/

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade