1page.title=Mudanças de comportamento 2page.keywords=preview,sdk,compatibility 3meta.tags="preview", "compatibility" 4page.tags="preview", "developer preview" 5page.image=images/cards/card-n-changes_2x.png 6@jd:body 7 8 9<div id="qv-wrapper"> 10<div id="qv"> 11 12<h2>Neste documento</h2> 13 14<ol> 15 <li><a href="#perf">Melhorias no desempenho</a> 16 <ol> 17 <li><a href="#doze">Soneca</a></li> 18 <li><a href="#bg-opt">Otimizações em segundo plano</a></li> 19 </ol> 20 </li> 21 <li><a href="#perm">Alterações nas permissões</a> 22 </li> 23 <li><a href="#sharing-files">Compartilhamento de arquivos entre aplicativos</a></li> 24 <li><a href="#accessibility">Melhorias na acessibilidade</a> 25 <ol> 26 <li><a href="#screen-zoom">Zoom de tela</a></li> 27 <li><a href="#vision-settings">Configurações de visão no assistente de configuração</a></li> 28 </ol> 29 </li> 30 <li><a href="#ndk">Aplicativos NDK vinculados a bibliotecas de plataforma</a></li> 31 <li><a href="#afw">Android for Work</a></li> 32 <li><a href="#annotations">Retenção de anotações</a></li> 33 <li><a href="#other">Outros pontos importantes</a></li> 34</ol> 35 36<h2>Veja também</h2> 37<ol> 38 <li><a href="{@docRoot}preview/api-overview.html"> 39Visão geral da API do Android N</a></li> 40</ol> 41 42</div> 43</div> 44 45 46<p> 47 Junto com novos recursos e funcionalidades, o Android N 48inclui uma variedade de mudanças de comportamento do sistema e da API. Este documento 49destaca algumas das principais mudanças que você deve entender e considerar 50nos aplicativos. 51</p> 52 53<p> 54 Caso tenha publicado anteriormente um aplicativo para Android, saiba que ele pode ser afetado 55 pelas alterações na plataforma. 56</p> 57 58 59<h2 id="perf">Bateria e memória</h2> 60 61<p> 62O Android N inclui alterações de comportamento do sistema com o objetivo de melhorar a vida útil da bateria 63nos dispositivos e reduzir o uso de RAM. Essas alterações podem afetar o acesso do aplicativo aos 64recursos do sistema, bem como a forma como ele interage com outros aplicativos por meio de 65 certas intenções explícitas . 66</p> 67 68<h3 id="doze">Soneca</h3> 69 70<p> 71 Introduzido no Android 6.0 (nível da API 23), o modo soneca aumenta a vida útil da bateria 72 adiando atividades de CPU e rede quando um usuário deixa um dispositivo desconectado, 73 estacionário e com a tela desativada. O Android N aprimora 74 ainda mais o modo soneca aplicando um subconjunto de restrições de CPU e rede 75 quando o dispositivo está desconectado e com a tela desativada, mas não necessariamente 76 estacionário, como, por exemplo, quando o celular está no bolso do usuário. 77</p> 78 79 80<img src="{@docRoot}preview/images/doze-diagram-1.png" alt="" height="251px" id="figure1" /> 81<p class="img-caption"> 82 <strong>Figura 1.</strong> Ilustração de como o modo soneca aplica um primeiro nível de 83 restrições de atividades de sistema para aumentar a vida útil da bateria. 84</p> 85 86<p> 87 Quando o dispositivo estiver sendo alimentado pela bateria e a tela estiver desativada por um determinado 88 período, o dispositivo entrará no modo de soneca e aplicará o primeiro subconjunto de restrições: o 89acesso do aplicativo à rede será desativado e os trabalhos e sincronizações serão adiados. Se o dispositivo permanecer 90estacionário por um determinado período após entrar no modo soneca, o sistema aplicará 91as demais restrições de soneca a {@link android.os.PowerManager.WakeLock}, aos alarmes 92{@link android.app.AlarmManager} e às verificações de GPS e Wi-Fi. Independentemente 93 de as restrições de soneca serem aplicadas parcial ou totalmente, o sistema despertará o 94 dispositivo para breves janelas de manutenção, quando os aplicativos 95 poderão acessar a rede e executar todos os trabalhos/sincronizações adiados. 96</p> 97 98 99<img src="{@docRoot}preview/images/doze-diagram-2.png" alt="" id="figure2" /> 100<p class="img-caption"> 101 <strong>Figura 2.</strong> Ilustração de como o modo soneca aplica um segundo nível de 102 restrições de atividades de sistema após o dispositivo permanecer estacionário por um determinado período. 103</p> 104 105<p> 106 Note que a ativação da tela ou do dispositivo encerra o modo soneca e 107 remove essas restrições de processamento. O comportamento adicional não 108 afeta as recomendações e práticas recomendadas para a adaptação do aplicativo à versão 109 anterior do modo soneca, introduzida no Android 6.0 (nível da API 23), como discutido em 110 <a href="{@docRoot}training/monitoring-device-state/doze-standby.html"> 111 Otimização para soneca e aplicativo em espera</a>. Você deve continuar 112 a seguir essas recomendações, como o uso do Google Cloud Messaging (GCM) para 113 enviar e receber mensagens, e começar a planejar atualizações para acomodar o 114 comportamento adicional do modo soneca. 115</p> 116 117 118<h3 id="bg-opt">Project Svelte: Otimizações em segundo plano</h3> 119 120<p> 121 O Android N remove três transmissões implícitas para ajudar a otimizar o 122 uso de memória e o consumo de energia. Essa alteração é necessária porque transmissões 123 implícitas iniciam frequentemente em segundo plano aplicativos 124 registrados para escutá-las. A remoção dessas transmissões pode beneficiar consideravelmente o desempenho 125do dispositivo e a experiência do usuário. 126</p> 127 128<p> 129 Dispositivos móveis passam por alterações frequentes na conectividade, como a alternância 130 entre Wi-Fi e dados móveis. No momento, os aplicativos podem monitorar alterações de 131 conectividade registrando um receptor para a transmissão implícita {@link 132 android.net.ConnectivityManager#CONNECTIVITY_ACTION} em seu 133 manifesto. Como vários aplicativos se registram para receber essa transmissão, uma única 134 mudança de rede pode fazer com que todos despertem e processem a transmissão 135 ao mesmo tempo. 136</p> 137 138<p> 139 De forma semelhante, em versões anteriores do Android, os aplicativos podiam se registrar para receber transmissões implícitas {@link 140 android.hardware.Camera#ACTION_NEW_PICTURE} e {@link 141 android.hardware.Camera#ACTION_NEW_VIDEO} de outros aplicativos, como 142 Câmera. Quando um usuário tira uma fotografia com o aplicativo Câmera, esses aplicativos são despertados 143 para processar a transmissão. 144</p> 145 146<p> 147 Para aliviar esses problemas, o Android N aplica a seguintes 148 otimizações: 149</p> 150 151<ul> 152 <li>Os aplicativos direcionados ao Android N não receberão transmissões {@link 153 android.net.ConnectivityManager#CONNECTIVITY_ACTION}, mesmo 154 se tiverem entradas no manifesto solicitando notificação desses eventos. Os aplicativos em execução 155ainda poderão escutar {@code CONNECTIVITY_CHANGE} no encadeamento principal 156 se solicitarem a notificação com {@link android.content.BroadcastReceiver}. 157 </li> 158 159 <li>Os aplicativos não podem enviar nem receber transmissões {@link 160 android.hardware.Camera#ACTION_NEW_PICTURE} ou {@link 161 android.hardware.Camera#ACTION_NEW_VIDEO}. Essa otimização 162 afeta todos os aplicativos e não apenas os direcionados ao Android N. 163 </li> 164</ul> 165 166<p>Se o seu aplicativo usar qualquer uma dessas intenções, remova as dependências 167 delas assim que possível para direcionar corretamente os dispositivos Android N. 168 A estrutura do Android oferece diversas soluções para reduzir a necessidade dessas 169 transmissões implícitas. Por exemplo, a API {@link 170 android.app.job.JobScheduler} oferece um mecanismo robusto para agendar 171 operações de rede quando ocorrem condições especificadas, como conexão a uma 172 rede ilimitada. Você pode até usar {@link 173android.app.job.JobScheduler} para reagir a mudanças em provedores de conteúdo. 174</p> 175 176<p> 177 Para obter mais informações sobre otimizações em segundo plano no N e como adaptar seu aplicativo, 178 consulte <a href="{@docRoot}preview/features/background-optimization.html">Otimizações 179em segundo plano</a>. 180</p> 181 182<h2 id="perm">Alterações nas permissões</h2> 183 184<p> 185 O Android N inclui alterações em permissões que podem afetar seu aplicativo. 186</p> 187 188<h3 id="permfilesys">Alterações nas permissões do sistema de arquivos</h3> 189 190<p> 191 Para aprimorar a segurança de arquivos privados, o diretório privado de 192 aplicativos direcionados ao Android N ou superior tem acesso restrito (<code>0700</code>). 193 Esta configuração impede o vazamento de metadados de arquivos privados, como tamanho 194 e existência. Esta alteração de permissão tem vários efeitos colaterais: 195</p> 196 197<ul> 198 <li> 199 O proprietário não deve mais relaxar as permissões para arquivos privados, 200 e qualquer tentativa de fazer isso usando 201 {@link android.content.Context#MODE_WORLD_READABLE} e/ou 202 {@link android.content.Context#MODE_WORLD_WRITEABLE} acionará uma 203 {@link java.lang.SecurityException}. 204 <p class="note"> 205 <strong>Observação:</strong> Até agora, essa restrição não foi adotada em pleno vigor. 206 Aplicativos ainda podem modificar permissões para o diretório privado usando 207 APIs nativas ou a API {@link java.io.File File}. No entanto, o relaxamento 208 de permissões para o diretório privado é enfaticamente desencorajado. 209 </p> 210 </li> 211 <li> 212 A passagem de URIs <code>file://</code> para fora do domínio do pacote pode deixar o 213 receptor com um caminho inacessível. Sendo assim, tentativas de passar um URI 214 <code>file://</code> acionam uma 215 <code>FileUriExposedException</code>. A forma recomendada para compartilhamento do 216 conteúdo de um arquivo privado é o uso do {@link 217 android.support.v4.content.FileProvider}. 218 </li> 219 <li> 220 O {@link android.app.DownloadManager} não consegue mais compartilhar 221 arquivos armazenados de forma privada por nome de arquivo. Os aplicativos de legado podem acabar em um 222 caminho inacessível quando acessam {@link 223 android.app.DownloadManager#COLUMN_LOCAL_FILENAME}. Aplicativos direcionados para o 224 Android N ou superior acionam uma {@link java.lang.SecurityException} quando 225 tentam acessar 226 {@link android.app.DownloadManager#COLUMN_LOCAL_FILENAME}. 227 Aplicativos de legado que definem o local de download para um local público 228 usando 229 {@link 230android.app.DownloadManager.Request#setDestinationInExternalFilesDir 231DownloadManager.Request.setDestinationInExternalFilesDir()} ou 232 {@link 233android.app.DownloadManager.Request#setDestinationInExternalPublicDir 234DownloadManager.Request.setDestinationInExternalPublicDir()} 235 ainda conseguem acessar o caminho em 236{@link android.app.DownloadManager#COLUMN_LOCAL_FILENAME}, no entanto, este 237 método é enfaticamente desencorajado. A forma preferencial para se acessar um arquivo 238 exposto pelo {@link android.app.DownloadManager} é o uso do 239{@link android.content.ContentResolver#openFileDescriptor 240ContentResolver.openFileDescriptor()}. 241 </li> 242</ul> 243 244<h2 id="sharing-files">Compartilhamento de arquivos entre aplicativos</h2> 245 246<p> 247Para aplicativos direcionados ao Android N, a estrutura do Android cumpre com 248a política de API {@link android.os.StrictMode} que proíbe a exposição de URIs {@code file://} 249fora do aplicativo. Se uma intenção que contenha o URI de um arquivo deixar o aplicativo, ele falhará 250 com uma exceção {@code FileUriExposedException}. 251</p> 252 253<p> 254Para compartilhar arquivos entre aplicativos, você deve enviar um URI {@code content://} 255e conceder uma permissão de acesso temporária ao URI. A forma mais fácil de conceder essa permissão é 256usar a classe {@link android.support.v4.content.FileProvider}. Para obter mais informações 257 sobre permissões e compartilhamento de arquivos, 258consulte <a href="{@docRoot}training/secure-file-sharing/index.html">Compartilhamento de Arquivos</a>. 259</p> 260 261<h2 id="accessibility">Melhorias na acessibilidade</h2> 262 263<p> 264 O Android N inclui mudanças criadas para aprimorar a facilidade de uso da 265 plataforma para usuários com visão reduzida ou deficiente. Normalmente, essas mudanças 266 não exigirão alterações de código no aplicativo. No entanto, analise 267 esse recurso e teste-o em seu aplicativo para avaliar possíveis impactos na experiência 268 do usuário. 269</p> 270 271 272<h3 id="screen-zoom">Zoom de tela</h3> 273 274<p> 275 O Android N permite que os usuários definam <strong>Display size</strong>, que amplia 276 ou reduz todos os elementos na tela, melhorando a acessibilidade do dispositivo 277 para usuários com visão deficiente. Os usuários não podem alterar o zoom da tela além da largura mínima de 278 tela de <a href="http://developer.android.com/guide/topics/resources/providing-resources.html"> 279sw320dp</a>, que é a largura do Nexus 4, um telefone comum de tamanho médio. 280</p> 281 282<div class="cols"> 283 284<div class="col-6"> 285 <img src="{@docRoot}preview/images/screen-zoom-1.png" alt="" height="XXX" id="figure1" /> 286</div> 287<div class="col-6"> 288 <img src="{@docRoot}preview/images/screen-zoom-2.png" alt="" height="XXX" id="figure1" /> 289</div> 290 291</div> <!-- end cols --> 292<p class="img-caption"> 293 <strong>Figura 3.</strong> A tela à direita mostra o efeito de 294 reduzir o Display size de um dispositivo executando uma imagem do sistema Android N. 295</p> 296 297 298<p> 299 Quando a densidade do dispositivo mudar, o sistema notificará os aplicativos em execução das 300 seguintes formas: 301</p> 302 303<ul> 304 <li>Se um aplicativo está direcionado ao nível da API 23 ou mais baixo, o sistema automaticamente elimina 305 todos os processos em segundo plano. Isso significa que, se um usuário sair 306 desse aplicativo para abrir a tela <em>Settings</em> e alterar a 307 configuração <strong>Display size</strong>, o sistema eliminará o aplicativo da mesma 308 forma que faria em uma situação de pouca memória. Se o aplicativo tiver processos 309 em primeiro plano, o sistema notificará esses processos sobre a mudança de configuração, como 310 descrito em <a href="{@docRoot}guide/topics/resources/runtime-changes.html">Processamento 311 de alterações no tempo de execução</a>, como se a orientação do dispositivo tivesse mudado. 312 </li> 313 314 <li>Se um aplicativo for direcionado ao Android N, todos os seus processos 315 (em primeiro e segundo plano) serão notificados da mudança de configuração, como 316 descrito em <a href="{@docRoot}guide/topics/resources/runtime-changes.html">Processamento 317 de alterações no tempo de execução</a>. 318 </li> 319</ul> 320 321<p> 322 A maioria dos aplicativos não precisa ser alterada para ser compatível com esse recurso, desde que 323 os aplicativos sigam as práticas recomendadas do Android. Os itens específicos a serem verificados são: 324</p> 325 326<ul> 327 <li>Teste o aplicativo em um dispositivo com largura de tela <code><a href= 328 "{@docRoot}guide/topics/resources/providing-resources.html">sw320dp</a></code> 329 e verifique se ele funciona adequadamente. 330 </li> 331 332 <li>Quando a configuração do dispositivo mudar, atualize todas as informações 333 dependentes de densidade armazenadas no cache, como bitmaps no cache ou recursos carregados da 334 rede. Verifique a ocorrência de alterações de configuração quando o aplicativo sair do estado pausado e retomar 335 a execução. 336 <p class="note"> 337 <strong>Observação:</strong> se você armazenar em cache dados dependentes de configuração, 338recomendamos incluir metadados relevantes, como o tamanho de tela 339 adequado ou a densidade de pixels desses dados. Salvar esses dados permitirá que você 340 decida se será necessário atualizar os dados armazenados em cache após uma mudança 341 de configuração. 342 </p> 343 </li> 344 345 <li>Evite especificar dimensões com unidades px, pois elas não são redimensionadas de 346 acordo com a densidade de tela. Em vez disso, especifique dimensões com unidades de <a href="{@docRoot}guide/practices/screens_support.html">pixel independente de 347 densidade</a> (<code>dp</code>). 348 </li> 349</ul> 350 351<h3 id="vision-settings">Configurações de visão no assistente de configuração</h3> 352 353<p> 354 Agora, o Android N inclui Configurações de visão na tela de boas-vindas, onde os usuários podem 355 definir as configurações de acessibilidade a seguir em um novo dispositivo: 356 <strong>gesto de ampliação</strong>, <strong>tamanho da fonte</strong> 357, <strong>tamanho da tela</strong> e <strong>TalkBack</strong>. Essa alteração 358 aumenta a visibilidade de erros relacionados a configurações de tela diferentes. Para 359 avaliar o impacto do recurso, teste seus aplicativos com essas 360configurações ativadas. As configurações podem ser encontradas em <strong>Settings > 361 Accessibility</strong>. 362</p> 363 364<h2 id="ndk">Aplicativos NDK vinculados a bibliotecas de plataforma</h2> 365 366<p> 367 O Android N inclui mudanças no namespace para evitar o carregamento de APIs não públicas. 368 Se você usar o NDK, use apenas APIs públicas da plataforma 369 Android. O uso de APIs não públicas na próxima versão oficial do Android 370 poderá causar problemas no seu aplicativo. 371</p> 372 373<p> 374 Para alertar sobre o uso de APIs não públicas, os aplicativos executados em um dispositivo 375 Android N geram um erro na saída logcat quando um aplicativo chama uma API não pública. 376 Esse erro também é exibido na tela do dispositivo como mensagem para que o usuário 377fique ciente da situação. Revise o código do seu aplicativo para 378 remover o uso de APIs de plataformas não públicas e faça testes completos do aplicativo usando 379 um dispositivo de visualização ou um emulador. 380</p> 381 382<p> 383 Se o seu aplicativo depender de bibliotecas de plataforma, consulte a documentação do NDK 384 para obter soluções usuais de substituição de APIs privadas comuns por APIs públicas equivalentes. 385 Também é possível que você esteja vinculando bibliotecas de plataforma sem perceber, 386 particularmente se o aplicativo usar uma biblioteca que faz parte da plataforma (como 387 <code>libpng</code>), mas não faz parte do NDK. Nesse caso, verifique se 388o APK contém todos os arquivos .so que você pretende vincular. 389</p> 390 391<p class="caution"> 392 <strong>Cuidado:</strong> Algumas bibliotecas de terceiros também podem conter links para APIs 393 não públicas. Se o aplicativo usar essas bibliotecas, poderá falhar quando executado 394 na próxima versão oficial do Android. 395</p> 396 397<p> 398 Os aplicativos não devem depender de nem usar bibliotecas nativas não incluídas 399 no NDK, pois elas podem ser alteradas ou removidas entre uma versão do Android 400 e outra. A mudança de OpenSSL para BoringSSL é um exemplo dessas alterações. 401 Além disso, dispositivos diferentes podem oferecer níveis distintos de compatibilidade, pois 402 não há requisitos de compatibilidade para bibliotecas de plataforma não incluídas 403no NDK. Se você precisar acessar bibliotecas que não são do NDK em dispositivos mais antigos, torne o carregamento 404dependente do nível da Android API. 405</p> 406 407<p> 408 Para ajudar a diagnosticar esses tipos de problemas, veja a seguir alguns exemplos de erros 409 de Java e NDK que podem ocorrer durante a compilação do aplicativo com o Android N: 410</p> 411 412<p>Exemplo de erro de Java:</p> 413<pre class="no-pretty-print"> 414java.lang.UnsatisfiedLinkError: dlopen failed: library "/system/lib/libcutils.so" 415 is not accessible for the namespace "classloader-namespace" 416</pre> 417 418<p>Exemplo de erro de NDK:</p> 419<pre class="no-pretty-print"> 420dlopen failed: cannot locate symbol "__system_property_get" referenced by ... 421</pre> 422 423 424<p> 425 Veja a seguir algumas correções comuns para aplicativos que encontram esses tipos de erro: 426</p> 427 428<ul> 429 <li>O uso de getJavaVM e getJNIEnv do libandroid_runtime.so pode ser substituído 430 por funções JNI padrão: 431<pre class="no-pretty-print"> 432AndroidRuntime::getJavaVM -> GetJavaVM from <jni.h> 433AndroidRuntime::getJNIEnv -> JavaVM::GetEnv or 434JavaVM::AttachCurrentThread from <jni.h>. 435</pre> 436 </li> 437 438 <li>O uso do símbolo {@code property_get} de {@code libcutils.so} pode ser 439 substituído pelo {@code alternative __system_property_get} público. 440 Para fazer isso, use {@code __system_property_get} com o include abaixo: 441<pre> 442#include <sys/system_properties.h> 443</pre> 444 </li> 445 446 <li>O uso do símbolo {@code SSL_ctrl} de {@code libcrypto.so} deve ser 447 substituído por uma versão local do aplicativo. Por exemplo, vincule estaticamente 448 {@code libcyrpto.a} no arquivo {@code .so} ou inclua dinamicamente o seu próprio 449 {@code libcrypto.so} do BoringSSL ou OpenSSL no aplicativo. 450 </li> 451</ul> 452 453<h2 id="afw">Android for Work</h2> 454<p> 455 O Android N contém mudanças para aplicativos direcionados ao Android for Work, incluindo 456 mudanças em instalação de certificados, redefinição de senha, gerenciamento de 457 usuários secundários e acesso a identificadores de dispositivos. Se você estiver criando aplicativos para 458 ambientes do Android for Work, examine essas mudanças e modifique 459 o aplicativo conforme necessário. 460</p> 461 462<ul> 463 <li>Você precisa instalar um instalador de certificado delegado antes que o DPC possa 464 configurá-lo. Para aplicativos de donos de perfil e dispositivo direcionados ao N SDK, você deve 465 instalar o instalador de certificado delegado antes de chamar o 466 controlador de políticas de dispositivo (DPC) 467 <code>DevicePolicyManager.setCertInstallerPackage()</code>. Se o instalador 468 não estiver instalado, o sistema gerará uma 469 <code>IllegalArgumentException</code>. 470 </li> 471 472 <li>As restrições de redefinição de senha de administradores do dispositivo agora se aplicam também a 473donos de perfil. Os administradores de dispositivo não podem mais usar 474 {@code DevicePolicyManager.resetPassword()} para limpar senhas nem para alterar 475 as já definidas. Os administradores de dispositivo ainda poderão definir uma senha, mas apenas 476 em dispositivos sem senha, PIN nem padrão. 477 </li> 478 479 <li>Donos de dispositivo e perfil poderão gerenciar contas, mesmo se restrições forem 480 definidas. Eles podem chamar as APIs de gerenciamento de contas, 481 mesmo se restrições de usuário <code>DISALLOW_MODIFY_ACCOUNTS</code> forem implementadas. 482 </li> 483 484 <li>Os donos de dispositivo podem gerenciar usuários secundários com maior facilidade. Quando um dispositivo 485 executar no modo de dono do dispositivo, a restrição <code>DISALLOW_ADD_USER</code> 486 será definida automaticamente. Isso evita que os usuários criem usuários secundários 487 não gerenciados. Além disso, os métodos <code>CreateUser()</code> e 488 <code>createAndInitializeUser()</code> ficaram obsoletos e foram substituídos 489 pelo novo método <code>DevicePolicyManager.createAndManageUser()</code>. 490 </li> 491 492 <li>Os donos de dispositivo podem acessar identificadores de dispositivo. O dono do dispositivo pode acessar o 493 endereço MAC Wi-Fi de um dispositivo usando 494 <code>DevicePolicyManagewr.getWifiMacAddress()</code>. Se a rede Wi-Fi nunca 495 foi ativada no dispositivo, esse método retorna o valor {@code null}. 496 </li> 497 498 <li>A configuração modo de trabalho controla o acesso a aplicativos de trabalho. Quando o modo de trabalho está desativado, a 499 tela de início do sistema mostra os aplicativos de trabalho em cinza para indicar que estão indisponíveis. Quando é 500 reativado, o modo de trabalho retorna ao comportamento normal. 501</ul> 502 503<p> 504 Para obter mais informações sobre as mudanças no Android for Work no Android N, consulte 505 <a href="{@docRoot}preview/features/afw.html">Atualizações no Android for Work</a>. 506</p> 507 508<h2 id="annotations">Retenção de anotações</h2> 509 510<p> 511O Android N corrige um erro em que a visibilidade de anotações era ignorada. 512Este problema permitia que o tempo de execução acessasse anotações a que não deveria 513ter acesso. Entre essas anotações, estão: 514</p> 515 516<ul> 517 <li>{@code VISIBILITY_BUILD}: que só deveria estar visível em tempo de compilação.</li> 518 <li>{@code VISIBILITY_SYSTEM}: que deveria estar visível em tempo de execução, mas apenas para o 519sistema subjacente.</li> 520</ul> 521 522<p> 523Se o seu aplicativo se baseou neste comportamento, adicione uma política de retenção para anotações que deve 524 estar disponível em tempo de execução. É possível fazer isso usando {@code @Retention(RetentionPolicy.RUNTIME)}. 525</p> 526 527<h2 id="other">Outros pontos importantes</h2> 528 529<ul> 530<li>Quando um aplicativo for executado no Android N, mas for direcionado a um nível da API menor 531 e o usuário alterar o tamanho da tela, o processo do aplicativo será eliminado. O aplicativo 532deverá ser capaz de processar corretamente esse cenário. Caso contrário, ele falhará 533quando o usuário restaurá-lo usando Recents. 534 535<p> 536Você deve testar o aplicativo para verificar 537se esse comportamento não ocorre. 538Isso pode ser feito causando uma falha idêntica 539eliminando o aplicativo manualmente usando o DDMS. 540</p> 541 542<p> 543Aplicativos direcionados ao Android N e versões posteriores não serão eliminados automaticamente em mudanças de densidade. 544No entanto, podem continuar a responder a alterações de configurações de forma não ideal. 545</p> 546</li> 547 548<li> 549Os aplicativos no Android N devem ser capazes de processar corretamente mudanças de configuração 550e não devem falhar em inicializações subsequentes. Você pode verificar o comportamento do aplicativo 551alterando o tamanho da fonte (<strong>Setting</strong> > 552<strong>Display</strong> > <strong>Font size</strong>) e depois restaurando 553o aplicativo em Recents. 554</li> 555 556<li> 557Devido a um erro em versões anteriores do Android, o sistema não sinaliza gravações 558 em um soquete TCP no encadeamento principal como violações do modo estrito. O Android N corrigiu esse erro. 559Agora, os aplicativos que exibirem este comportamento gerarão uma{@code android.os.NetworkOnMainThreadException}. 560Geralmente, a realização de operações de rede no encadeamento principal é uma má ideia porque essas operações 561geralmente têm alta latência no final, causando ANRs e problemas. 562</li> 563 564<li> 565Agora, por padrão, a família de métodos {@code Debug.startMethodTracing()} armazena 566os resultados no diretório específico do pacote no armazenamento compartilhado, 567 e não no nível mais alto 568 do cartão SD. Isso significa que os aplicativos não precisam mais solicitar a permissão {@code WRITE_EXTERNAL_STORAGE} para usar estas APIs. 569</li> 570 571<li> 572Muitas APIs de plataformas começaram a verificar grandes cargas úteis enviadas 573por meio de transações {@link android.os.Binder}, e o 574sistema agora gera novamente{@code TransactionTooLargeExceptions} 575como {@code RuntimeExceptions}, em vez de registrá-las ou suprimi-las silenciosamente. Um 576exemplo comum é armazenar dados demais em 577{@link android.app.Activity#onSaveInstanceState Activity.onSaveInstanceState()}, 578que faz com que {@code ActivityThread.StopInfo} gere uma 579{@code RuntimeException} quando seu aplicativo é direcionado ao Android N. 580</li> 581 582<li> 583Se um aplicativo publica tarefas {@link java.lang.Runnable} para uma {@link android.view.View} e 584 esta {@link android.view.View} 585não está anexada a uma janela, o sistema 586coloca a tarefa {@link java.lang.Runnable} em fila com a {@link android.view.View}. 587A tarefa {@link java.lang.Runnable} não é executada até que a 588{@link android.view.View} esteja anexada 589a uma janela. Este comportamento corrige os seguintes erros: 590<ul> 591 <li>Se um aplicativo publicasse em uma {@link android.view.View} de um encadeamento que não fosse o encadeamento de IU da janela pretendida 592, o {@link java.lang.Runnable} poderia acabar sendo executado no encadeamento errado. 593 </li> 594 <li>Se a tarefa {@link java.lang.Runnable} fosse publicada de um encadeamento que não fosse 595 um encadeamento de looper, o aplicativo poderia expor a tarefa {@link java.lang.Runnable}.</li> 596</ul> 597</li> 598 599<li> 600Se um aplicativo no Android N com permissão 601{@link android.Manifest.permission#DELETE_PACKAGES DELETE_PACKAGES} 602tentar excluir um pacote instalado por outro aplicativo, 603o sistema solicitará a confirmação do usuário. Nesse cenário, os aplicativos devem esperar 604{@link android.content.pm.PackageInstaller#STATUS_PENDING_USER_ACTION STATUS_PENDING_USER_ACTION} 605como status de retorno ao invocar 606{@link android.content.pm.PackageInstaller#uninstall PackageInstaller.uninstall()}. 607</li> 608 609</ul> 610 611