O Android 10 apresenta ótimos recursos e funções para usuários e desenvolvedores. Este documento destaca o que está disponível para os desenvolvedores.
Para saber mais sobre as APIs, leia o Relatório de diferenças entre APIs ou acesse a Referência da API do Android e procure APIs que foram "adicionadas na API de nível 29". Confira também as mudanças de comportamento do Android 10 (para apps direcionados à API de nível 29 e para todos os apps), assim como as mudanças de privacidade, para saber as áreas em que as alterações de plataforma podem afetar seus apps.
Melhorias na segurança
O Android 10 apresenta vários recursos de segurança, resumidos nas seções a seguir.
Caixas de diálogo de autenticação biométrica aprimoradas
O Android 10 introduz as seguintes melhorias na compatibilidade com a autenticação biométrica:
- Uma verificação do recurso de autenticação biométrica.
- Um mecanismo substituto que permite que o usuário se autentique usando o PIN, padrão ou senha do dispositivo, se não conseguir se autenticar usando a entrada biométrica.
- Uma dica que informa ao sistema para não exigir confirmação do usuário depois que ele for autenticado usando uma modalidade biométrica implícita. Por exemplo, é possível informar ao sistema que nenhuma outra confirmação precisa ser pedida após um usuário fazer a autenticação facial.
Executar código DEX incorporado diretamente no APK
A partir do Android 10, você pode dizer à plataforma para executar o código DEX incorporado diretamente no arquivo APK do app. Essa opção evita um ataque caso um invasor consiga adulterar o código compilado localmente no dispositivo.
Para mais informações, consulte Executar o código DEX incorporado diretamente no APK.
Compatibilidade com TLS 1.3
O Android 10 adiciona suporte ao TLS 1.3 (link em inglês). O TLS 1.3 é uma revisão importante do padrão TLS, que inclui benefícios de desempenho e segurança aprimorada. Nossos comparativos de mercado indicam que conexões seguras podem ser estabelecidas até 40% mais rápido com o TLS 1.3 em relação ao TLS 1.2.
Para mais detalhes sobre nossa implementação do TLS 1.3, consulte a seção TLS na página de mudanças de comportamento de todos os apps.
API pública Conscrypt
A partir do Android 10, o provedor de segurança Conscrypt inclui uma API pública para a funcionalidade TLS.
A coleção de classes em
android.net.ssl
contém métodos
estáticos para acessar a funcionalidade que não está disponível nas APIs
javax.net.ssl
genéricas. Os nomes dessas classes podem ser inferidos como o plural
da classe javax.net.ssl
correspondente. Por exemplo, o código que opera em
instâncias de javax.net.ssl.SSLSocket
pode usar métodos de
SSLSockets
.
Recursos de conectividade
O Android 10 inclui várias melhorias relacionadas a rede e conectividade.
API de conexão de rede Wi-Fi
O Android 10 agora é compatível com conexões ponto a ponto. Esse
recurso permite que seu app solicite ao usuário a alteração do ponto de acesso ao qual o
dispositivo está conectado usando
WifiNetworkSpecifier
para descrever as propriedades de uma rede solicitada. A conexão ponto a ponto é
usada para fins que não fornecem rede, por exemplo, a configuração de bootstrap para
dispositivos secundários, como o hardware do Chromecast e do Google Home.
Para mais informações, consulte API Wi-Fi Network Request para conectividade ponto a ponto.
API de sugestão de rede Wi-Fi
O Android 10 passa a permitir que seu app solicite ao usuário a conexão a um ponto de acesso Wi-Fi. Você pode sugerir a que rede se conectar. A plataforma vai escolher qual ponto de acesso aceitar com base na entrada do seu app e de outros.
Para mais informações sobre esse recurso, consulte Sugestão de Wi-Fi.
Melhorias nos modos Wi-Fi de alto desempenho e baixa latência
O Android 10 permite que você forneça uma sugestão ao modem usado para minimizar a latência.
O Android 10 estende a API de bloqueio de Wi-Fi para que ela realmente seja compatível com o modo de alto desempenho e de baixa latência. A economia de energia com Wi-Fi é desativada para os modos de alto desempenho e baixa latência, e a otimização da latência pode ser ativada no modo de baixa latente, dependendo da compatibilidade do modem.
O modo de baixa latência é ativado apenas quando o app que está adquirindo o bloqueio está em execução em primeiro plano e a tela está ativada. Esse modo é especialmente útil para apps de jogos em tempo real para dispositivos móveis.
Pesquisas especializadas no resolvedor de DNS
O Android 10 oferece suporte nativo para buscas DNS especializadas usando
pesquisas de texto sem criptografia e o modo DNS sobre TLS. Anteriormente, o resolvedor de DNS
da plataforma era compatível apenas com registros A e AAAA, que permitiam procurar apenas os endereços IP
associados a um nome, mas não eram compatíveis com nenhum outro tipo de registro.
A API DnsResolver
oferece resolução assíncrona e genérica, permitindo a busca de SRV
, NAPTR
e outros tipos de registro. Observe que a análise da resposta é deixada para execução pelo app.
Para apps baseados em NDK, consulte android_res_nsend
.
Wi-Fi Easy Connect
O Android 10 permite que você use o Easy Connect para provisionar credenciais de Wi-Fi
a um dispositivo peer, como uma substituição da WPS, que ficou obsoleta.
Os apps podem integrar o Easy Connect à própria configuração e ao fluxo de provisionamento usando
o
intent
ACTION_PROCESS_WIFI_EASY_CONNECT_URI
.
Para mais informações sobre esse recurso, consulte Wi-Fi Easy Connect.
API de conexão Wi-Fi Direct
As classes de API WifiP2pConfig
e WifiP2pManager
têm atualizações no Android 10
para oferecer suporte a recursos de estabelecimento de conexão rápida ao Wi-Fi Direct usando
informações predeterminadas. Essas informações são compartilhadas por um canal paralelo, como
Bluetooth ou NFC.
O exemplo de código abaixo mostra como criar um grupo usando informações predeterminadas:
Kotlin
val manager = getSystemService(Context.WIFI_P2P_SERVICE) as WifiP2pManager val channel = manager.initialize(this, mainLooper, null) // prefer 5G band for this group val config = WifiP2pConfig.Builder() .setNetworkName("networkName") .setPassphrase("passphrase") .enablePersistentMode(false) .setGroupOperatingBand(WifiP2pConfig.GROUP_OWNER_BAND_5GHZ) .build() // create a non-persistent group on 5GHz manager.createGroup(channel, config, null)
Java
WifiP2pManager manager = (WifiP2pManager) getSystemService(Context.WIFI_P2P_SERVICE); Channel channel = manager.initialize(this, getMainLooper(), null); // prefer 5G band for this group WifiP2pConfig config = new WifiP2pConfig.Builder() .setNetworkName("networkName") .setPassphrase("passphrase") .enablePersistentMode(false) .setGroupOperatingBand(WifiP2pConfig.GROUP_OWNER_BAND_5GHZ) .build(); // create a non-persistent group on 5GHz manager.createGroup(channel, config, null);
Para entrar em um grupo usando credenciais, substitua manager.createGroup()
pelo
seguinte:
Kotlin
manager.connect(channel, config, null)
Java
manager.connect(channel, config, null);
Canais orientados à conexão (CoC) Bluetooth LE
O Android 10 permite que seu app use conexões CoC BLE para transferir grandes fluxos de dados entre dois dispositivos BLE. Essa interface abstrai o Bluetooth e a mecânica de conectividade para simplificar a implementação.
Recursos de telefonia
O Android 10 inclui várias melhorias relacionadas à telefonia.
Melhorias na qualidade das chamadas
O Android 10 adiciona a capacidade de coletar informações sobre a qualidade das chamadas do Subsistema multimídia IP (IMS, na sigla em inglês) em andamento, incluindo a qualidade de e para a rede, em dispositivos compatíveis com o recurso.
Filtro de ligações e identificador de chamadas
O Android 10 oferece ao seu app meios para identificar chamadas que não estão
no catálogo de endereços do usuário como possíveis chamadas de spam e para que as chamadas de spam sejam
rejeitadas de modo silencioso em nome do usuário. As informações sobre essas chamadas bloqueadas
são registradas como chamadas bloqueadas no registro de chamadas para fornecer maior transparência ao
usuário quando são chamadas perdidas. O uso dessa API elimina a necessidade
de receber permissões READ_CALL_LOG
do usuário para oferecer a funcionalidade de filtro de ligações
e identificador de chamadas.
API de serviço de redirecionamento de chamadas
O Android 10 altera a forma como os intents de chamadas são processados. A transmissão
NEW_OUTGOING_CALL
foi descontinuada e substituída pela
API CallRedirectionService
. A API CallRedirectionService
fornece
interfaces para você modificar chamadas de saída feitas pela plataforma Android. Por
exemplo, apps de terceiros podem cancelar chamadas e redirecioná-las por VoIP.
Melhorias na criação de arquivos no armazenamento externo
Além de introduzir o armazenamento com escopo, o Android 10 adiciona os seguintes recursos relacionados ao armazenamento externo:
- Você pode usar a flag
IS_PENDING
para conceder ao app acesso exclusivo a um arquivo de mídia gravado no disco. - Se você souber que há um local específico em que os arquivos precisam ser armazenados, você pode fornecer ao sistema uma dica sobre onde armazenar os arquivos recém-gravados.
- Cada dispositivo de armazenamento externo tem um nome de volume exclusivo.
Mídia e gráficos
O Android 10 introduz os novos recursos e APIs de mídia e gráficos a seguir:
Compartilhar entradas de áudio
O Android 10 adiciona a capacidade de dois apps compartilharem a entrada de áudio simultaneamente. Para informações completas, consulte Compartilhar entradas de áudio.
Captura de reprodução de áudio
O Android 10 oferece aos apps a capacidade de capturar a reprodução de áudio de outros apps. Para mais informações, consulte Captura de reprodução.
Barra de procura nas notificações do MediaStyle
A partir do Android 10, as notificações do MediaStyle
exibem uma barra de procura. A barra mostra
o progresso da reprodução de
PlaybackState.getPosition()
,
e, em alguns casos, pode ser usada para procurar um local no programa
em execução. A aparência e o comportamento da barra são controlados por estas regras:
- A barra de busca aparece se houver uma
MediaSession
ativa e se a duração (especificada porMediaMetadata.METADATA_KEY_DURATION
) for maior que zero. Isso significa que a barra não aparece para fluxos indeterminados, como transmissões ao vivo e transmissões de rádio. - Se a sessão implementar
ACTION_SEEK_TO
, o usuário poderá arrastar a barra de procura para controlar o local da reprodução.
API Native MIDI
A API Android Native MIDI (AMidi) oferece aos desenvolvedores de apps a capacidade de enviar e receber dados MIDI com código C/C++, promovendo uma integração maior com a lógica de controle/áudio C/C++ e minimizando a necessidade de JNI.
Para mais informações, consulte API Android Native MIDI.
Melhorias no MediaCodecInfo
O Android 10 adiciona métodos a
MediaCodecInfo
que revelam mais
informações sobre um codec.
Para mais informações, consulte Codecs de mídia.
API Thermal
Quando os dispositivos ficam muito quentes, eles podem limitar a CPU e/ou a GPU, e isso pode afetar apps e jogos de maneiras inesperadas. Os apps que usam gráficos complexos, computação intensa ou atividade de rede sustentada têm maior probabilidade de causar problemas, e esses podem variar entre dispositivos com base em frequências de chipset e núcleo, níveis de integração e também no empacotamento e formato do dispositivo.
No Android 10, os apps e jogos podem usar uma API Thermal para monitorar as mudanças no dispositivo e tomar medidas para manter um uso de energia mais baixo e restaurar a temperatura normal. Os apps registram um listener no PowerManager, por meio do qual o sistema informa o status térmico contínuo, que varia de leve e moderado a grave, crítico, de emergência e de desligamento.
Quando o dispositivo relata estresse térmico, os apps e jogos podem ajudar, colocando em espera aleatória as atividades em andamento para reduzir o uso de energia de várias maneiras. Por exemplo, apps de streaming podem reduzir a resolução/taxa de bits ou o tráfego de rede, um app de câmera pode desativar o flash ou o aprimoramento intensivo da imagem, um jogo pode reduzir a frame rate ou o mosaico de polígono, um app de mídia pode reduzir o volume do alto-falante e um app de mapas pode desativar o GPS.
A API Thermal exige uma nova camada HAL de dispositivo. No momento, ela é compatível com dispositivos Pixel com Android 10, e estamos trabalhando com nossos parceiros fabricantes de dispositivos para oferecer maior compatibilidade ao ecossistema o mais rápido possível.
Câmera e imagens
O Android 10 introduz os novos recursos de câmera e imagem a seguir:
Compatibilidade com câmera monocromática
O Android 9 (API de nível 28) apresentou pela primeira vez o recurso de câmera monocromática. O Android 10 inclui várias melhorias de compatibilidade com a câmera monocromática:
- Compatibilidade com o formato de fluxo Y8 para melhorar a eficiência da memória.
- Compatibilidade com captura em DNG bruto monocromático.
- Introdução das enumerações MONO e NIR CFA para distinguir entre câmeras monocromáticas comuns e câmeras de infravermelho próximo.
É possível usar esse recurso para capturar uma imagem monocromática nativa. Um dispositivo lógico com várias câmeras pode usar uma câmera monocromática como uma subcâmera física para melhorar a qualidade da imagem com pouca luz.
Formato Profundidade dinâmica
A partir do Android 10, as câmeras podem armazenar os dados de profundidade da imagem em um arquivo separado, usando um novo esquema chamado Formato de profundidade dinâmica (DDF, na sigla em inglês). Os apps podem solicitar a imagem JPG e os metadados de profundidade, usando essas informações para aplicar o desfoque desejado no pós-processamento sem modificar os dados da imagem original.
Para ler a especificação do formato, consulte Formato Profundidade dinâmica.
Formato de arquivo de imagem de alta eficiência
O formato de arquivo de imagem de alta eficiência (HEIF, na sigla em inglês) é um formato padrão de imagem e vídeo que introduz uma codificação de qualidade superior e menor tamanho de arquivo em comparação com outros formatos de arquivo.
Para mais informações sobre o formato de arquivo, consulte HEIC.
Melhorias na funcionalidade de várias câmeras
O Android 10 melhora a fusão de várias câmeras em uma única câmera lógica, um recurso introduzido no Android 9 (API de nível 28). Foram adicionados à API Camera2:
isSessionConfigurationSupported(SessionConfiguration sessionConfig)
: permite consultar se a configuração da sessão transmitida pode ou não ser usada para criar uma sessão de captura de câmera.LOGICAL_MULTI_CAMERA_ACTIVE_PHYSICAL_ID
: permite determinar o ID da câmera física ativa que faz o backup de um dispositivo de câmera lógico. É possível usar os IDs retornados para solicitar streams lógicos e streams de subcâmeras físicas para melhorar a eficiência do consumo de energia.
API de serviços de acessibilidade
O Android 10 apresenta os seguintes novos recursos e APIs de serviços de acessibilidade:
Sinalização de chave de entrada AccessibilityNodeInfo
No Android 10 e versões mais recentes, é possível chamar
isTextEntryKey()
para determinar se um determinado AccessibilityNodeInfo
representa uma tecla de entrada de texto
que faz parte de um teclado.
Feedback falado da caixa de diálogo de acessibilidade
Caso os usuários precisem executar o atalho de acessibilidade para iniciar um serviço de acessibilidade, o Android 10 permite que a caixa de diálogo seja acompanhada de um comando de conversão de texto em voz, se o serviço solicitar.
Atalho de acessibilidade quando a navegação por gestos está ativada
Quando o recurso de navegação por gestos está ativado no Android 10, o botão de acessibilidade não fica visível nem selecionável. Para acessar o menu de serviços de acessibilidade, os usuários precisam realizar um dos seguintes gestos:
- Deslizar para cima com dois dedos
- Deslizar para cima com dois dedos e segurar
Atalho de acessibilidade para teclados físicos
No Android 10, os usuários podem acionar o atalho de acessibilidade em um teclado físico pressionando Control+Alt+Z.
Melhoria do controlador de teclado virtual
No Android 10, os serviços de acessibilidade podem solicitar que o teclado virtual seja exibido mesmo quando o dispositivo detectar um teclado físico conectado. Os usuários podem modificar esse comportamento.
Tempos limite de acessibilidade definidos pelo usuário
O Android 10 apresenta a
API
getRecommendedTimeoutMillis()
. Esse método oferece suporte a tempos limite definidos pelo usuário para elementos de interface interativos e
não interativos. O valor de retorno é influenciado pelas preferências
do usuário e pelas APIs de serviço de acessibilidade.
Melhorias no preenchimento automático
O Android 10 contém as seguintes melhorias no serviço de preenchimento automático.
Solicitações de preenchimento automático relacionadas com compatibilidade
É possível usar a flag
FillRequest.FLAG_COMPATIBILITY_MODE_REQUEST
para determinar se uma solicitação de preenchimento automático foi gerada pelo modo
de compatibilidade.
Salvar nome de usuário e senha simultaneamente
É possível oferecer suporte a casos em que um app usa várias atividades para
exibir nome de usuário, senha e outros campos usando a
flag
SaveInfo.FLAG_DELAY_SAVE
.
Interação do usuário com a IU de salvamento
Também é possível exibir e ocultar um campo de senha em uma caixa de diálogo de salvamento. Para isso, é preciso definir um listener de ação na caixa de diálogo e alterar a visibilidade da visualização remota de senha correspondente.
Compatibilidade com atualização de conjuntos de dados
O preenchimento automático pode atualizar senhas existentes. Por exemplo, se um usuário já tiver armazenado uma senha e salvar uma nova, o preenchimento automático vai pedir que ele atualize a senha existente em vez de salvar uma nova.
Melhorias de classificação de campo
O Android 10 contém as seguintes melhorias para a API Field Classification.
Construtor UserData.Builder
O construtor
UserData.Builder
foi alterado para se alinhar melhor ao padrão Builder
.
Permitir que um valor seja mapeado para vários tipos de IDs de categoria
Ao usar
UserData.Builder
no
Android 10, será possível mapear um valor para vários tipos de IDs de categoria. Nas
versões anteriores, uma exceção era gerada se um valor fosse adicionado mais de uma vez.
Compatibilidade aprimorada com números de cartão de crédito
A classificação de campo agora detecta números de quatro dígitos como os últimos quatro dígitos de um número de cartão de crédito.
Compatibilidade com a classificação de campo específico do app
O Android 10 inclui
FillResponse.setUserData()
,
que permite definir dados do usuário específicos do app enquanto durar a sessão.
Isso ajuda o serviço de preenchimento automático a detectar tipos de campos com conteúdo específico do
app.
Controles da IU e do sistema
O Android 10 traz as seguintes melhorias da interface do usuário:
Compatibilidade com limites do JVMTI PopFrame
O Android 10 passa a ser compatível com o recurso
can_pop_frames
na implementação da JVMTI do Android. Durante a depuração, esse recurso
permite que você execute novamente as funções após pausar em um ponto de interrupção e ajustar
locais, globais ou a implementação de uma função. Para saber mais, consulte a página de referência do Pop Frame da Oracle.
API Surface control
O Android 10 oferece uma
API SurfaceControl
para acesso de baixo nível ao compositor do sistema
(SurfaceFlinger
). Para
a maioria dos usuários, o SurfaceView é a maneira correta de usar o compositor. A
API SurfaceControl
pode ser útil em alguns casos, como:
- Sincronização de várias superfícies
- Incorporação de superfície de processo cruzado
- Gerenciamento de ciclo de vida de nível inferior
A API SurfaceControl
está disponível nas vinculações do
SDK e do NDK.
A implementação do NDK inclui uma API para troca manual de buffers com o
compositor. Essa é uma alternativa para os usuários que se deparam com as
limitações de
BufferQueue
.
Detecção de renderizador inativo WebView
O Android 10 apresenta a classe abstrata
WebViewRenderProcessClient
, que os apps podem usar para detectar se uma
WebView
deixou de responder. Para
usar essa classe:
- Defina sua própria subclasse e implemente os métodos
onRenderProcessResponsive()
eonRenderProcessUnresponsive()
. - Anexe uma instância do
WebViewRenderProcessClient
a um ou mais objetosWebView
. - Se o
WebView
parar de responder, o sistema vai chamar o métodoonRenderProcessUnresponsive()
do cliente, passando oWebView
eWebViewRenderProcess
. Se oWebView
for um processo único, o parâmetroWebViewRenderProcess
será nulo. Seu app pode tomar as medidas adequadas, como mostrar uma caixa de diálogo ao usuário perguntando se ele quer interromper o processo de renderização.
Se o WebView
continuar sem resposta, o sistema vai chamar onRenderProcessUnresponsive()
periodicamente (não mais do que uma vez a cada cinco segundos), mas não vai realizar nenhuma outra ação.
Se o WebView
voltar a responder, o sistema vai chamar onRenderProcessResponsive()
apenas uma vez.
Painéis de configurações
O Android 10 apresenta os Painéis de configurações, uma API que permite aos apps mostrar as configurações para os usuários no contexto do app. Isso evita que os usuários precisem acessar as Configurações para alterar itens como NFC ou Dados móveis para usar o app.
Por exemplo, suponha que um usuário abra um navegador da Web enquanto o dispositivo está no modo avião. Antes do Android 10, o app só podia exibir uma mensagem genérica solicitando ao usuário que abrisse as Configurações para restaurar a conectividade. Com o Android 10, o app do navegador pode exibir um painel in-line mostrando as principais configurações de conectividade, como o modo avião, o Wi-Fi (incluindo redes próximas) e dados móveis. Com esse painel, os usuários podem restaurar a conectividade sem sair do app.
Para mostrar um painel de configurações, dispare um intent com uma das seguintes
ações Settings.Panel
:
Kotlin
val panelIntent = Intent(Settings.Panel.settings_panel_type) startActivityForResult(panelIntent)
Java
Intent panelIntent = new Intent(Settings.Panel.settings_panel_type); startActivityForResult(panelIntent);
settings_panel_type
pode ser:
ACTION_INTERNET_CONNECTIVITY
- Mostra as configurações relacionadas à conectividade com a Internet, como modo avião, Wi-Fi e dados móveis.
ACTION_WIFI
- Mostra as configurações de Wi-Fi, mas não mostra as outras configurações de conectividade. Isso é útil para apps que precisam de uma conexão Wi-Fi para fazer uploads ou downloads grandes.
ACTION_NFC
- Mostra todas as configurações relacionadas à comunicação a curta distância (NFC).
ACTION_VOLUME
- Mostra as configurações de volume para todos os streams de áudio.
Melhorias de compartilhamento
O Android 10 oferece várias melhorias para o compartilhamento:
API Sharing Shortcuts
A API Sharing Shortcuts substitui as APIs Direct Share.
Em vez de recuperar os resultados de forma reativa sob demanda, a API Sharing Shortcuts
permite que os apps publiquem alvos de compartilhamento direto com antecedência. Confira como
o ShortcutManager
funciona.
Como as duas APIs são semelhantes, expandimos a API
ShortcutInfo
para facilitar o uso dos dois
recursos. Com a API Sharing Shortcuts, é possível atribuir
categorias ou pessoas diretamente a um alvo de compartilhamento. Os alvos de compartilhamento continuam no sistema
até que o mesmo app os atualize ou que o app seja desinstalado.
O mecanismo de compartilhamento direto antigo ainda funciona, mas os apps que o utilizam têm uma prioridade mais baixa do que os que usam a API Sharing Shortcuts.
ShortcutInfo.Builder
adiciona e aprimora métodos para fornecer mais informações sobre o destino de compartilhamento.
Destinos de compartilhamento direto
Você pode publicar um atalho dinâmico como um destino de compartilhamento direto. Consulte Publicar destinos de compartilhamento direto.
ShortcutManagerCompat
é uma nova API do AndroidX que oferece compatibilidade com a antiga API DirectShare. Essa
é a maneira preferencial de publicar alvos de compartilhamento.
Visualização de texto
Quando um app compartilha conteúdo de texto, ele pode mostrar uma visualização opcional do conteúdo na interface do Sharesheet.
Consulte Como adicionar visualizações rich text
Saiba mais
Para mais informações sobre como os apps podem compartilhar dados, consulte Enviar dados simples para outros apps e Receber dados simples de outros apps.
Tema escuro
O Android 10 oferece um tema escuro que se aplica à IU do sistema Android e aos apps em execução no dispositivo. Para mais informações, consulte Tema escuro.
Tipos de serviços em primeiro plano
O Android 10 introduz o atributo de manifesto XML
foregroundServiceType
, que você inclui na definição de vários serviços
específicos. É possível, embora raramente seja adequado, atribuir vários
tipos de serviços em primeiro plano a um serviço específico.
A tabela a seguir mostra os diferentes tipos de serviços em primeiro plano e os serviços em que é apropriado declarar um tipo específico:
Tipo de serviço em primeiro plano | Exemplo de caso de uso para um serviço que deve declarar esse tipo |
---|---|
connectedDevice
| Acompanhar um monitor wearable de atividades físicas |
dataSync
| Fazer o download de arquivos de uma rede |
location
| Continuar uma ação iniciada pelo usuário |
mediaPlayback
| Tocar um livro de áudio, podcast ou música |
mediaProjection
| Gravar um vídeo da tela do dispositivo durante um curto período de tempo |
phoneCall
| Lidar com chamadas em curso |
Kotlin
O Android 10 inclui as seguintes atualizações para o desenvolvimento em Kotlin.
Anotações de valores nulos para APIs libcore
O Android 10 melhora a cobertura de anotações de valores nulos no SDK para as APIs libcore. Essas anotações permitem que os desenvolvedores de apps que estão usando a análise de valores nulos do Kotlin ou Java no Android Studio recebam informações de nulidade ao interagir com essas APIs.
Normalmente, violações de contrato de nulidade no Kotlin geram erros de
compilação. Para garantir a compatibilidade com o código existente, somente as anotações
@RecentlyNullable
e @RecentlyNonNull
são adicionadas. Isso significa
que as violações de nulidade geram avisos em vez de erros.
Além disso, todas as anotações @RecentlyNullable
ou @RecentlyNonNull
que foram
adicionadas no Android 9 estão mudando para @Nullable
e @NonNull
, respectivamente.
Isso significa que, no Android 10 e versões mais recentes, as violações de nulidade
levam a erros em vez de avisos.
Para mais informações sobre as mudanças de anotações, consulte O SDK do Android Pie agora é mais compatível com Kotlin no blog Android Developers.
NDK
O Android 10 inclui as alterações do NDK descritas a seguir.
Depuração aprimorada da propriedade do descritor de arquivo
O Android 10 adiciona o fdsan, que ajuda a localizar e corrigir problemas de propriedade de descritor de arquivos com mais facilidade.
Bugs relacionados ao uso incorreto da propriedade do descritor de arquivo, que tendem a se manifestar como uso após o fechamento e fechamento duplo, são análogos aos bugs de uso após a liberação e liberação dupla de alocação de memória, mas tendem a ser muito mais difíceis de diagnosticar e corrigir. O fdsan tenta detectar e/ou impedir o uso incorreto do descritor de arquivo forçando a propriedade do descritor de arquivo.
Para mais informações sobre falhas relacionadas a esses problemas, consulte Erro detectado pelo fdsan. Para mais informações sobre o fdsan, consulte a página do Googlesource sobre fdsan (em inglês).
TLS ELF
Os aplicativos criados usando o NDK com uma API de nível mínimo 29 podem usar ELF TLS
em vez de emutls
. A compatibilidade com o vinculador dinâmico e estático foi adicionada para dar suporte
a esse método de manipulação de variáveis locais de linha de execução.
Para apps criados para a API de nível 28 e anteriores, foram implementadas melhorias
para que o libgcc/compiler-rt
resolva alguns problemas de emutls
.
Para mais informações, consulte Mudanças no Android para desenvolvedores do NDK.
Ambiente de execução
O Android 10 inclui a mudança no ambiente de execução descrita a seguir.
Acionamento de coleta de lixo baseada em Mallinfo
Quando pequenos objetos Java da plataforma fazem referência a objetos grandes no heap C++, os objetos C++ podem ser recuperados apenas quando o objeto Java é coletado e, por exemplo, finalizado. Em versões anteriores, a plataforma estimava os tamanhos de muitos objetos C++ associados a objetos Java. Essa estimativa nem sempre era precisa e, ocasionalmente, resultava em um aumento significativo no uso de memória, já que a plataforma não coletava lixo quando deveria.
No Android 10, o coletor de lixo (GC) rastreia o tamanho total
do heap alocado pelo sistema malloc()
, garantindo que grandes alocações
malloc()
sejam sempre incluídas nos cálculos de acionamento de GC. Os apps que intercalam
um grande número de alocações de C++ com a execução de Java podem ter um aumento na
frequência de coleta de lixo como consequência. Outros apps podem ter uma pequena redução.
Teste e depuração
O Android 10 inclui as melhorias em testes e depuração descritas a seguir.
Melhorias na geração de traces do sistema no dispositivo
No Android 10, você pode especificar limites para o tamanho e a duração de um trace ao gerar um trace do sistema no dispositivo. Quando você especifica um desses valores, o sistema gera um trace longo, copiando periodicamente o buffer do trace para o arquivo de destino enquanto o trace é gravado. O trace é concluído quando os limites de tamanho ou duração especificados são atingidos.
Use esses outros parâmetros para testar diferentes casos de uso que você testaria com um trace padrão. Por exemplo, você pode estar diagnosticando um bug de desempenho que só ocorre depois que o app é executado por um longo período. Nesse caso, você poderia gerar um trace longo durante um dia inteiro e, depois, analisar o programador de CPU, a atividade do disco, as linhas de execução do app e outros dados no relatório para ajudar a determinar a causa do bug.
No Android 10 e versões mais recentes, os arquivos de trace são salvos em um formato que pode ser aberto com o Perfetto (link em inglês), um projeto de código aberto para instrumentação e rastreamento de desempenho. Você pode converter arquivos de rastro do Perfetto para o formato Systrace (link em inglês).
Melhorias no TextClassifier
O Android 10 oferece outras funcionalidades de classificação de texto na
interface
TextClassifier
.
Detecção de idioma
O método
detectLanguage()
funciona de maneira semelhante aos métodos de classificação já existentes. Ele
recebe um objeto
TextLanguage.Request
e retorna um objeto
TextLanguage
.
Os objetos TextLanguage
consistem em uma lista de pares ordenados. Cada par
contém uma localidade e uma pontuação de confiança correspondente para a classificação.
Sugestões de ações de conversa
O método
suggestConversationActions()
funciona de maneira semelhante aos métodos de classificação já existentes. Ele recebe um objeto
ConversationActions.Request
e retorna um objeto
ConversationActions
.
Os objetos
ConversationActions
são uma lista de objetos
ConversationAction
. Cada objeto ConversationAction
inclui uma possível
ação sugerida e o valor de confiabilidade dela.
Respostas inteligentes/ações em notificações
O Android 9 introduziu a capacidade de mostrar respostas sugeridas em uma notificação. O Android 10 expande isso com a capacidade de incluir ações sugeridas baseadas em intent. Além disso, a plataforma é capaz de gerar essas sugestões automaticamente. Os apps ainda podem fornecer as próprias sugestões ou recusar sugestões geradas pelo sistema.A API usada para gerar essas respostas faz parte de
TextClassifier
e também foi diretamente exposta aos desenvolvedores no Android 10.
Leia a seção sobre melhorias no TextClassifier para mais informações.
Se o app fornecer sugestões próprias, a plataforma não gerará
sugestões automáticas. Se você não quiser que as notificações do seu app mostrem
respostas ou ações sugeridas, desative as respostas
e ações geradas pelo sistema usando
setAllowGeneratedReplies()
e
setAllowSystemGeneratedContextualActions()
.