Post on 15-Feb-2017
Novidades do Android 7.+Algumas novidades dessa mais nova versão do Android
Luiz Cristofori
- Dev Android na Concrete há 1 ano- Dev Java Web por 5 anos- Projetos participados: Estácio,
Nextel e CS Billing
Apresentação
Bruno Vieira
- Androideiro na CS há 1 ano- Participante do time CartolaFC- Cursando Ciência da Computação
Conteúdo:
– Android 7.0:
• Notificação
• Acessibilidade
• Doze
• Multi-window
• Compilação JIT/AOT no ART
• Data Saver
• Vulkan API
• Quick Settings Tile API
Novidades do Android 7.+
– Android 7.1:
• App Shortcuts
• Storage Manager Intent
Android 7.0
Notifications
Maior InteratividadeMais informaçãoMenos desperdício de espaço
Notifications
- Direct replies- Bundled Notification- Mark as read- Notification Peeking
Accessibility
- Vision Settings- Display Size- Mono- Text-to-speech
Accessibility
Accessibility
- 320dp- API 23 ou menor- Sem muita implementação- Uso de DP e não PX
DOZEvamos cortar um doze
- Introduced in Marshmallow- Maintenance Windows- Stationary- 30 minutes
DOZE
- Refined in Nougat- Wakelocks- Not only stationary
Multi-window
Possibilidade de dividir a tela entre diferentes aplicações
Suporte às duas orientações de tela - portrait e landscape
Diferentes formas de personalização por parte do usuário
Multi-window
Aproveitamento melhor de telas em determinados devices;
Fabricantes de celulares determinam a possibilidade;
Algumas fabricantes já possuem suporte a multi-window, porém de forma não nativa.
Multi-window para desenvolvedores
Implementação rápida e bem fácil
APENAS uma tag no arquivo manifest
Algumas opções de customizações individuais
Não altera o ciclo de vida da activity
Métodos na activity para identificar se o app entrou em modo de multi-window
Multi-window para desenvolvedores
Atributos para configuração em elementos <activity> ou <application>:- android:resizeableActivity=["true" | "false"]
- android:supportsPictureInPicture=["true" | "false"]
Atributos para configuração em elementos <layout>:- android:defaultWidth - android:minWidth - android:gravity- android:defaultHeight - android:minHeight
Métodos para activity:- isInMultiWindowMode() - isInPictureInPictureMode()- onMultiWindowModeChanged() - onPictureInPictureModeChanged()
Multi-window para desenvolvedores
Compilador JIT/AOT no ART
Entendendo as siglas:- ART - Android Runtime - Atual VM do Android- Dalvik - Antiga VM do Android- AOT - Ahead-of-time compilation - Compilação do código dex para
um código bytecode, mais específico para o device, no momento de instalação
- JIT - Just-in-time compilation - Mesma otimização, mas feita durante o uso do app
Mix do melhor dos dois mundos JIT/OAT
Compilador JIT/AOT no ART
Visa acelerar - e muito - o processo de instalação de um app, atualizações de sistemas e reduzir espaço que o app ocupa depois de instalado
Otimização inteligente JIT feita enquanto o device está idle ou carregando
Constante atualização do bytecode otimizado
Modo de economia de dados para planos móveis de internet 3g/4g
Usuário pode ligar ou desligar este modo. Ao ser ligado o sistema bloqueia o uso de dados em background e sinaliza aos apps para usar a menor quantidade de dados em foreground possível
É possível adicionar apps a uma whitelist para terem livre acesso ao consumo de dados mesmo com este modo ativado
Para economizar o uso de dados o app deve diminuir a qualidade das imagens e dos vídeos e os bit rates de um streaming
Data Saver
Data Saver para o desenvolvedor
Método para verificar se a rede conectada é considerada limitada- connMgr.isActiveNetworkMetered()
Caso seja, chamamos um método para verificar o status do Data Saver- connMgr.getRestrictBackgroundStatus()
E por fim, fazemos um switch/case entre as opções
- RESTRICT_BACKGROUND_STATUS_ENABLED
- RESTRICT_BACKGROUND_STATUS_WHITELISTED
- RESTRICT_BACKGROUND_STATUS_DISABLED
Data Saver para o desenvolvedor
Vulkan API
Até o Nougat, o Android usava a OpenGL ES - rival da Vulkan
Tem como característica ser uma API de “menor sobrecarga”
Desenvolvedor tem total controle ao hardware do device - GPU
Melhor performance e menor dependência de alguma implementação extra para uma determinada GPU
Vulkan API
Similar à Metal API, desenvolvida pela Apple
Maior facilidade para o desenvolvedor publicar seus games em diversas plataformas - Android, Linux, Windows, SteamOS
Apoiadores: Samsung, NVidia, Valve...
Fácil portabilidade entre plataformas
Vulkan API vs DirectX 12
Vulkan API
Alguns jogos que estão usando:
Quick Settings Tile
Maneira fácil e rápida do usuário acionar alguma função “crítica” do seu app
Um tile deve ser muito bem pensado antes de ser posto ali - Qual é a urgência dessa ação? E a sua frequência de uso? Vale a pena?
Diferentes possibilidades de interação: iniciar uma tarefa em background, pausar essa tarefa, abrir um dialog, ou até mesmo abrir uma activity do seu app
Quick Settings Tile para o desenvolvedor
Muita atenção ao escolher o ícone e o título do tile!
Cada tile é associado a um TileService
Como qualquer service basta você declará-lo no manifest
Depois, basta criar uma classe Java e estender a classe TileService
Quick Settings Tile para o desenvolvedor
Listeners que podem ser customizados:- onDestroy()- onTileAdded()- onTileRemoved()- onStartListening()- onStopListening()- onClick()
O processamento que será executado no método onClick() será na UI thread, então caso seja um processamento bem pesado é recomendado movê-lo para uma outra thread
Quick Settings Tile para o desenvolvedor
Quick Settings Tile para o desenvolvedor
Android 7.1
Shortcut3D TouchDeep LinkingIsso já existe no meu iPhone
Ações pontuais de sua app
Classificação estática e dinâmica
Static Shortcut
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.myapplication"> <application ... > <activity android:name="Main"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <meta-data android:name="android.app.shortcuts" android:resource="@xml/cs_shortcuts" /> </activity> </application></manifest>
Ação genérica.
Static Shortcut
<shortcuts xmlns:android="http://schemas.android.com/apk/res/android"> <shortcut android:shortcutId="compose" android:enabled="true" android:icon="@drawable/compose_icon" android:shortcutShortLabel="@string/short_label" android:shortcutLongLabel="@string/long_label" android:shortcutDisabledMessage="@string/disabled_text"> <intent android:action="android.intent.action.VIEW" android:targetPackage="com.example.myapplication" android:targetClass="com.example.myapplication.HomeActivity" /> <categories android:name="android.shortcut.conversation" /> </shortcut> <!-- Outros shortcuts aqui --></shortcuts>
res/xml/cs_shortcuts
Dynamic Shortcut
ShortcutManager shortcutManager = getSystemService(ShortcutManager.class);
ShortcutInfo shortcut = new ShortcutInfo.Builder(this, "id1") .setShortLabel("Concrete") .setLongLabel("Concrete Solutions") .setIcon(Icon.createWithResource(context, R.drawable.ic_web)) .setIntent(new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.concretesolutions.com.br/"))) .build();
shortcutManager.setDynamicShortcuts(Arrays.asList(shortcut));
Ação mutável.Dããã
Shortcut - Best Practices
https://commondatastorage.googleapis.com/androiddevelopers/shareables/design/app-shortcuts-design-guidelines.pdf
•GuideLine
•4 Distintos Shortcuts
•Limite de descrição
•Preservação de shortcuts dinâmicos
Storage Manager Intent
Usado para facilitar o problema de pouco espaço na memória interna
Resolver este problema pode trazer muitas dores de cabeça para o desenvolvedor
Maneira rápida de o app “sugerir” que o usuário limpe espaço da memória interna
Válido para apps que precisam armazenar uma quantidade de dados considerável
Storage Manager Intent para desenvolvedores
Links relevantes
- Android 7.0 Nougat - link
- Android 7.0 for developers - link
- Android 7.1 for developers - link
- Android Design: O que devemos saber - link
Perguntas?
Fontes
http://www.androidcentral.com/android-70-better-and-more-interactive-notificationshttps://www.thurrott.com/mobile/android/78293/android-7-0-nougat-tip-master-notificationshttp://www.androidcentral.com/android-n-developer-preview-brings-accessibility-improvementshttps://developer.android.com/about/versions/nougat/android-7.0-changes.html#accessibilityhttp://www.howtodroid.com/2016/08/change-text-item-size-nougat.htmlhttp://www.greenbot.com/article/3112224/android/what-you-need-to-know-about-doze-mode-in-android-nougat.htmlhttp://lifehacker.com/how-android-doze-works-and-how-to-tweak-it-to-save-you-1785921957https://developer.android.com/about/versions/nougat/android-7.0-changes.html#perfhttps://www.thurrott.com/mobile/android/83888/android-7-1-nougat-tip-app-shortcutshttps://developer.android.com/about/versions/nougat/android-7.1.htmlhttps://developer.android.com/guide/topics/ui/shortcuts.htmlhttps://catinean.com/2016/10/20/exploring-android-nougat-7-1-app-shortcuts/
www.concretesolutions.com.br
Rio de Janeiro – Rua São José, 90 – cj. 2121Centro – (21) 2240-2030
São Paulo - Rua Sansão Alves dos Santos, 433 4º andar - Brooklin - (11) 4119-0449
Ajudamos empresas a criar produtos digitais de sucesso