1 page.title=Cambios en los comportamientos 2 page.keywords=versin preliminar,sdk,compatibilidad 3 meta.tags="preview", "compatibility" 4 page.tags="preview", "developer preview" 5 page.image=images/cards/card-n-changes_2x.png 6 @jd:body 7 8 9 <div id="tb-wrapper"> 10 <div id="tb"> 11 12 <h2>En este documento</h2> 13 14 <ol> 15 <li><a href="#perf">Mejoras de rendimiento</a> 16 <ol> 17 <li><a href="#doze">Descanso</a></li> 18 <li><a href="#bg-opt">Optimizaciones en segundo plano</a></li> 19 </ol> 20 </li> 21 <li><a href="#perm">Cambios en los permisos</a> 22 </li> 23 <li><a href="#sharing-files">Intercambio de archivos entre aplicaciones</a></li> 24 <li><a href="#accessibility">Mejoras de accesibilidad</a> 25 <ol> 26 <li><a href="#screen-zoom">Zoom de la pantalla</a></li> 27 <li><a href="#vision-settings">Vision Settings en el asistente de configuracin</a></li> 28 </ol> 29 </li> 30 <li><a href="#ndk">Aplicaciones del NDK con vnculos a bibliotecas de plataformas</a></li> 31 <li><a href="#afw">Android for Work</a></li> 32 <li><a href="#annotations">Retencin de anotaciones</a></li> 33 <li><a href="#other">Otros aspectos importantes</a></li> 34 </ol> 35 36 <h2>Consulta tambin</h2> 37 <ol> 38 <li><a href="{@docRoot}preview/api-overview.html"> 39 Informacin general sobre la API de Android N</a></li> 40 </ol> 41 42 </div> 43 </div> 44 45 46 <p> 47 Adems de nuevas caractersticas y capacidades, Android N 48 incluye diversos cambios en el sistema y en los comportamientos de la API. En este documento, 49 se destacan algunos de los cambios principales que debes comprender y justificar 50 en tus aplicaciones. 51 </p> 52 53 <p> 54 Si publicaste anteriormente una aplicacin para Android, ten en cuenta que tu aplicacin 55 podra verse afectada por estos cambios en la plataforma. 56 </p> 57 58 59 <h2 id="perf">Batera y memoria</h2> 60 61 <p> 62 Android N incluye cambios en los comportamientos del sistema para mejorar la duracin de la batera 63 de los dispositivos y reducir el uso de la memoria RAM. Estos cambios pueden afectar el acceso de tu aplicacin a 64 recursos del sistema, adems de la manera en que tu aplicacin interacta con otras aplicaciones mediante 65 determinadas intents implcitas. 66 </p> 67 68 <h3 id="doze">Descanso</h3> 69 70 <p> 71 Descanso, presentado en Android 6.0 (nivel de API 23), prolonga la duracin de la batera 72 aplazando actividades de CPU y red cuando un usuario deja un dispositivo desenchufado, 73 quieto y con la pantalla apagada. En Android N se ofrecen ms 74 mejoras para Descanso a travs de la aplicacin de un subconjunto de restricciones de CPU y red 75 mientras el dispositivo se encuentra desenchufado y con la pantalla apagada, aunque no necesariamente 76 quieto; por ejemplo, al ir dentro del bolsillo de un usuario en movimiento. 77 </p> 78 79 80 <img src="{@docRoot}images/android-7.0/doze-diagram-1.png" alt="" height="251px" id="figure1" /> 81 <p class="img-caption"> 82 <strong>Figura 1:</strong> Ilustracin del modo en que Descanso aplica un primer nivel de 83 restricciones de actividad del sistema para prolongar la duracin de la batera. 84 </p> 85 86 <p> 87 Cuando un dispositivo funciona con la batera y la pantalla permanece apagada durante un tiempo 88 determinado, se activa en este el modo Descanso y se aplica el primer subconjunto de restricciones: se 89 desactiva el acceso de las aplicaciones a la red y se aplazan tareas y sincronizaciones. Si el dispositivo 90 permanece quieto durante un tiempo determinado tras activarse el modo Descanso, el sistema aplica el 91 resto de las restricciones del modo a {@link android.os.PowerManager.WakeLock}, 92 alarmas de {@link android.app.AlarmManager}, GPS y anlisis de Wi-Fi. Independientemente de que 93 se apliquen algunas o todas las restricciones del modo Descanso, el sistema activa el 94 dispositivo durante plazos de mantenimiento breves en los cuales las aplicaciones tienen 95 acceso a la red y pueden ejecutar sincronizaciones o procesos aplazados. 96 </p> 97 98 99 <img src="{@docRoot}images/android-7.0/doze-diagram-2.png" alt="" id="figure2" /> 100 <p class="img-caption"> 101 <strong>Figura 2:</strong> Ilustracin del modo en que Descanso aplica un segundo nivel de 102 restricciones de actividad del sistema despus de que el dispositivo permanece quieto durante un tiempo determinado. 103 </p> 104 105 <p> 106 Ten en cuenta que, cuando se activa la pantalla o se enchufa el dispositivo, se desactiva el modo Descanso y 107 se retiran estas restricciones de procesamiento. El comportamiento adicional no 108 tiene efecto sobre las recomendaciones ni las prcticas recomendadas para adaptar tu aplicacin a la versin 109 anterior de Descanso, presentada en Android 6.0 (nivel de API 23), segn lo descrito en 110 <a href="{@docRoot}training/monitoring-device-state/doze-standby.html"> 111 Optimizacin para Descanso y App Standby</a>. De todos modos, debes 112 seguir las recomendaciones; por ejemplo, la de usar Google Cloud Messaging (GCM) para 113 enviar y recibir mensajes, y la de planificar actualizaciones para adaptar 114 el comportamiento adicional de Descanso. 115 </p> 116 117 118 <h3 id="bg-opt">Project Svelte: Optimizaciones en segundo plano</h3> 119 120 <p> 121 En Android N, se eliminan tres transmisiones implcitas para ayudar a optimizar el uso de la 122 memoria y el consumo de energa. Este cambio es necesario porque las transmisiones 123 implcitas a menudo inician aplicaciones que se registran para realizar un seguimiento de ellas en 124 segundo plano. La eliminacin de estas transmisiones puede mejorar sustancialmente el rendimiento del dispositivo 125 y la experiencia del usuario. 126 </p> 127 128 <p> 129 Los dispositivos mviles estn sujetos a cambios de conectividad frecuentes 130 entre los modos de datos Wi-Fi y mviles. Actualmente, las aplicaciones pueden realizar controles en busca de cambios en la 131 conectividad registrando un receptor para la transmisin implcita {@link 132 android.net.ConnectivityManager#CONNECTIVITY_ACTION} en su 133 manifiesto. Debido a que muchas aplicaciones se registran para recibir esta transmisin, un cambio de 134 red puede hacer que todas se activen y procesen la transmisin a la 135 vez. 136 </p> 137 138 <p> 139 Asimismo, en versiones anteriores de Android, las aplicaciones podan registrarse para recibir las transmisiones implcitas {@link 140 android.hardware.Camera#ACTION_NEW_PICTURE} y {@link 141 android.hardware.Camera#ACTION_NEW_VIDEO} de otras aplicaciones, como la 142 cmara. Cuando un usuario toma una foto con la aplicacin de la cmara, estas aplicaciones se activan 143 para procesar la transmisin. 144 </p> 145 146 <p> 147 Para corregir estos problemas, en Android N se aplican las siguientes 148 optimizaciones: 149 </p> 150 151 <ul> 152 <li>Las aplicaciones orientadas a Android N no reciben transmisiones {@link 153 android.net.ConnectivityManager#CONNECTIVITY_ACTION}, aun cuando contengan 154 entradas de manifiesto que les permitan solicitar notificaciones de estos eventos. Las aplicaciones que 155 se ejecutan an pueden escuchar {@code CONNECTIVITY_CHANGE} en su subproceso principal 156 si solicitan una notificacin con un {@link android.content.BroadcastReceiver}. 157 </li> 158 159 <li>Las aplicaciones no pueden enviar ni recibir transmisiones {@link 160 android.hardware.Camera#ACTION_NEW_PICTURE} ni {@link 161 android.hardware.Camera#ACTION_NEW_VIDEO}. Esta optimizacin 162 afecta a todas las aplicaciones, no solo a aquellas orientadas a Android N. 163 </li> 164 </ul> 165 166 <p>Si la aplicacin utiliza cualquiera de estas intents, debes quitar las dependencias 167 en ellas lo antes posible a fin de poder orientar los dispositivos con Android N correctamente. 168 El framework de Android ofrece varias soluciones para mitigar la necesidad de 169 estas transmisiones implcitas. Por ejemplo, la API {@link 170 android.app.job.JobScheduler} proporciona un mecanismo slido para programar 171 operaciones de red cuando se cumplen las condiciones especificadas, como una conexin a una 172 red de uso no medido. Puedes usar {@link 173 android.app.job.JobScheduler} para responder a cambios en proveedores de contenido. 174 </p> 175 176 <p> 177 Para obtener ms informacin sobre optimizaciones en segundo plano en Android N y la manera de adaptar tu aplicacin, 178 consulta <a href="{@docRoot}preview/features/background-optimization.html">Optimizaciones 179 en segundo plano</a>. 180 </p> 181 182 <h2 id="perm">Cambios en los permisos</h2> 183 184 <p> 185 En Android N, se incorporan cambios en permisos que pueden afectar tu aplicacin. 186 </p> 187 188 <h3 id="permfilesys">Cambios en los permisos del sistema de archivos</h3> 189 190 <p> 191 Para mejorar la seguridad de los archivos privados, el directorio privado de 192 las aplicaciones orientadas a Android N o versiones posteriores tiene acceso restringido. (<code>0700</code>). 193 Esta configuracin evita la fuga de metadatos de archivos privados, como su tamao 194 o existencia. Este cambio en los permisos tiene varios efectos secundarios: 195 </p> 196 197 <ul> 198 <li> 199 Los propietarios ya no pueden reducir los permisos de archivo de los archivos privados, 200 y un intento de hacerlo utilizando 201 {@link android.content.Context#MODE_WORLD_READABLE} o 202 {@link android.content.Context#MODE_WORLD_WRITEABLE} activar una 203 {@link java.lang.SecurityException}. 204 <p class="note"> 205 <strong>Nota:</strong> Desde ahora, esta restriccin no se aplica planamente. 206 Las aplicaciones pueden seguir modificando los permisos para sus directorios privados con 207 las API nativas o la API {@link java.io.File File}. Sin embargo, desaconsejamos 208 reducir los permisos para el directorio privado. 209 </p> 210 </li> 211 <li> 212 Pasar URI <code>file://</code> fuera del dominio del paquete puede dar al 213 receptor una ruta de acceso inaccesible. Por lo tanto, los intentos de pasar un 214 URI <code>file://</code> activan una 215 <code>FileUriExposedException</code>. La manera recomendada para compartir el 216 contenido de un archivo privado consiste en utilizar el {@link 217 android.support.v4.content.FileProvider}. 218 </li> 219 <li> 220 El {@link android.app.DownloadManager} ya no puede compartir archivos 221 almacenados de manera privada por nombre de archivo. Las aplicaciones heredadas pueden terminar con una 222 ruta de acceso inaccesible cuando acceden a {@link 223 android.app.DownloadManager#COLUMN_LOCAL_FILENAME}. Las aplicaciones orientadas a 224 Android N o versiones posteriores activan una {@link java.lang.SecurityException} cuando 225 intentan acceder a 226 {@link android.app.DownloadManager#COLUMN_LOCAL_FILENAME}. 227 Las aplicaciones heredadas que establecen la ubicacin de descarga en una ubicacin pblica 228 usando 229 {@link 230 android.app.DownloadManager.Request#setDestinationInExternalFilesDir 231 DownloadManager.Request.setDestinationInExternalFilesDir()} o 232 {@link 233 android.app.DownloadManager.Request#setDestinationInExternalPublicDir 234 DownloadManager.Request.setDestinationInExternalPublicDir()} 235 siguen teniendo acceso a la ruta de acceso en 236 {@link android.app.DownloadManager#COLUMN_LOCAL_FILENAME}; sin embargo, se desaconseja 237 seguir este mtodo. El mtodo preferido para acceder a un archivo 238 expuesto por el{@link android.app.DownloadManager} consiste en utilizar 239 {@link android.content.ContentResolver#openFileDescriptor 240 ContentResolver.openFileDescriptor()}. 241 </li> 242 </ul> 243 244 <h2 id="sharing-files">Intercambio de archivos entre aplicaciones</h2> 245 246 <p> 247 En las aplicaciones orientadas a Android N, el framework de Android aplica 248 la poltica de la API {@link android.os.StrictMode} que prohbe exponer URI {@code file://} 249 fuera de la aplicacin. Si una intent con un URI de archivo sale de tu aplicacin, la aplicacin falla 250 con una excepcin {@code FileUriExposedException}. 251 </p> 252 253 <p> 254 Para compartir archivos entre aplicaciones, debes enviar un URI {@code content://} 255 y otorgar un permiso de acceso temporal en el URI. La forma ms sencilla de otorgar este permiso es 256 utilizando la clase {@link android.support.v4.content.FileProvider}. Para obtener ms informacin 257 sobre permisos e intercambio de archivos, 258 consulta <a href="{@docRoot}training/secure-file-sharing/index.html">Intercambio de archivos</a>. 259 </p> 260 261 <h2 id="accessibility">Mejoras de accesibilidad</h2> 262 263 <p> 264 En Android N, se incluyen cambios destinados a mejorar la usabilidad de la 265 plataforma para usuarios con defectos o discapacidades visuales. Estos cambios 266 generalmente no deben exigir modificaciones en el cdigo de tu aplicacin. Sin embargo, debes revisar 267 estas funciones y probarlas con tu aplicacin para avaluar el posible impacto en la experiencia 268 del usuario. 269 </p> 270 271 272 <h3 id="screen-zoom">Zoom de la pantalla</h3> 273 274 <p> 275 Android N permite a los usuarios configurar <strong>Display size</strong>, el ajuste que expande 276 o contrae todos los elementos de la pantalla, lo cual mejora la accesibilidad al dispositivo 277 para usuarios con poca visin. Estos no podrn superar el valor de zoom 278 mnimo de <a href="http://developer.android.com/guide/topics/resources/providing-resources.html"> 279 sw320dp</a> para el ancho de pantalla, que es el ancho de un Nexus 4, un telfono comn de tamao intermedio. 280 </p> 281 282 <div class="cols"> 283 284 <div class="col-6"> 285 <img src="{@docRoot}images/android-7.0/screen-zoom-1.png" alt="" height="XXX" id="figure1" /> 286 </div> 287 <div class="col-6"> 288 <img src="{@docRoot}images/android-7.0/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> En la pantalla de la derecha se muestra el efecto que tiene 294 aumentar Display size para un dispositivo con una imagen de sistema de Android N. 295 </p> 296 297 298 <p> 299 Al cambiar la densidad del dispositivo, el sistema notifica a las aplicaciones de las 300 siguientes maneras: 301 </p> 302 303 <ul> 304 <li>Si una aplicacin se orienta hacia el nivel de API 23 o uno inferior, el sistema automticamente finaliza 305 todos los procesos en segundo plano. Esto significa que, si un usuario hace a un lado 306 dicha aplicacin para abrir la pantalla <em>Settings</em> y cambiar la configuracin de 307 <strong>Display size</strong>, el sistema finalizar la aplicacin tal 308 como lo hara en una situacin de bajos recursos de memoria. Si en la aplicacin hay procesos en 309 primer plano, el sistema notifica a estos procesos el cambio en la configuracin como se 310 indica en <a href="{@docRoot}guide/topics/resources/runtime-changes.html">Manejo de cambios 311 en tiempo de ejecucin</a>, as como lo hara si cambiara la orientacin del dispositivo. 312 </li> 313 314 <li>Si una aplicacin se orienta hacia Android N, se notifica a todos los procesos 315 (en primer y segundo plano) el cambio en la configuracin, como se 316 indica en <a href="{@docRoot}guide/topics/resources/runtime-changes.html">Manejo de cambios 317 en tiempo de ejecucin</a>. 318 </li> 319 </ul> 320 321 <p> 322 En la mayora de las aplicaciones, no se necesitan cambios para admitir esta funcin, si 323 en ellas se siguen las prcticas recomendadas de Android. Verificaciones especficas que deben realizarse: 324 </p> 325 326 <ul> 327 <li>Prueba tu aplicacin en un dispositivo con ancho de pantalla <code><a href= 328 "{@docRoot}guide/topics/resources/providing-resources.html">sw320dp</a></code> 329 y asegrate de que funcione bien. 330 </li> 331 332 <li>Cuando se modifique la configuracin del dispositivo, actualiza la informacin almacenada en cach que 333 dependa de la densidad, como los mapas de bits o recursos almacenados en cach que se carguen desde la 334 red. Busca de cambios en la configuracin cuando se reanude la actividad de la aplicacin, despus de la 335 pausa. 336 <p class="note"> 337 <strong>Nota:</strong> Si almacenaste en cach datos que dependen de la configuracin, te 338 convendr incluir metadatos relacionados, como el tamao de pantalla 339 correspondiente o la densidad de pxeles para dichos datos. Guardar estos metadatos te permite 340 decidir si necesitas actualizar los datos almacenados en cach despus de un cambio en la 341 configuracin. 342 </p> 343 </li> 344 345 <li>Evita especificar dimensiones con unidades px, ya que no responden a la 346 densidad de pantalla. En lugar de ello, recurre a unidades de <a href="{@docRoot}guide/practices/screens_support.html">pxeles 347 (<code>dp</code>) independientes de la densidad</a>. 348 </li> 349 </ul> 350 351 <h3 id="vision-settings">Vision Settings en el asistente de configuracin</h3> 352 353 <p> 354 Vision Settings se incluye en la pantalla de Bienvenida de Android N, en la cual los usuarios pueden 355 configurar los siguientes ajustes de accesibilidad para un nuevo dispositivo: 356 <strong>Magnification gesture</strong>, <strong>Font size</strong>, 357 <strong>Display size</strong> y <strong>TalkBack</strong>. Este cambio 358 aumenta la visibilidad de errores relacionados con diferentes ajustes de pantalla. Para 359 evaluar el impacto de esta funcin, debes probar tus aplicaciones con estos 360 ajustes habilitados. Puedes encontrarlos en <strong>Settings > 361 Accessibility</strong>. 362 </p> 363 364 <h2 id="ndk">Aplicaciones del NDK con vnculos a bibliotecas de plataformas</h2> 365 366 <p> 367 En Android N, se incluyen cambios en el espacio de nombres a fin de evitar la carga de API no pblicas. 368 Si usas el NDK, solo debes emplear API pblicas de la plataforma de 369 Android. El uso de API no pblicas en la prxima versin oficial de Android 370 puede hacer que tu aplicacin se bloquee. 371 </p> 372 373 <p> 374 Con el propsito de alertarte sobre el uso de API no pblicas, las aplicaciones que funcionen en un dispositivo con 375 Android N producirn un error de salida de logcat cuando una de ellas llame a una API no pblica. 376 Este error tambin aparecer en la pantalla del dispositivo como un mensaje para ayudar a 377 generar conciencia respecto de la situacin. Debes revisar el cdigo de tu aplicacin para 378 quitar el uso de API de plataformas no pblicas y probar por completo tus aplicaciones con 379 un dispositivo de prueba o emulador. 380 </p> 381 382 <p> 383 Si tu aplicacin depende de bibliotecas de plataformas, consulta la documentacin sobre el NDK a fin de hallar 384 soluciones tpicas para el reemplazo de API privadas comunes por API pblicas equivalentes. 385 Tambin es posible que establezcas vnculos con bibliotecas de plataformas sin notarlo, 386 en especial si tu aplicacin usa una biblioteca que forma parte de la plataforma (como 387 <code>libpng</code>), pero no del NDK. En ese caso, asegrate de que 388 tu APK contenga todos los archivos .so con los cuales intentaste establecer vnculos. 389 </p> 390 391 <p class="caution"> 392 <strong>Advertencia:</strong> Algunas bibliotecas de terceros pueden establecer vnculos con API 393 no pblicas. Si tu aplicacin usa estas bibliotecas, es probable que se bloquee al ejecutarse 394 en la prxima versin oficial de Android. 395 </p> 396 397 <p> 398 Las aplicaciones no deben depender de bibliotecas nativas no incluidas en el NDK 399 ni usarlas, ya que pueden modificarse o eliminarse en la transicin de una versin de Android a 400 otra. El cambio de OpenSSL a BoringSSL es un ejemplo de modificaciones como esta. 401 A su vez, los diferentes dispositivos pueden ofrecer distintos niveles de compatibilidad, debido a que 402 no existen requisitos de compatibilidad para bibliotecas de plataformas no incluidas 403 en el NDK. Si debes acceder a bibliotecas no relacionadas con el NDK en dispositivos anteriores, haz que la 404 carga dependa del nivel de la API de Android. 405 </p> 406 407 <p> 408 Para ayudarte a diagnosticar estos tipos de problemas, a continuacin, se ofrecen ejemplos de errores de Java y 409 del NDK que podras hallar al intentar compilar tu aplicacin con Android N: 410 </p> 411 412 <p>Ejemplo de error de Java:</p> 413 <pre class="no-pretty-print"> 414 java.lang.UnsatisfiedLinkError: dlopen failed: library "/system/lib/libcutils.so" 415 is not accessible for the namespace "classloader-namespace" 416 </pre> 417 418 <p>Ejemplo de error de NDK:</p> 419 <pre class="no-pretty-print"> 420 dlopen failed: cannot locate symbol "__system_property_get" referenced by ... 421 </pre> 422 423 424 <p> 425 Aqu se ofrecen soluciones tpicas para aplicaciones en las que se produzcan estos tipos de errores: 426 </p> 427 428 <ul> 429 <li>getJavaVM y getJNIEnv de libandroid_runtime.so pueden reemplazarse 430 por funciones estndares de JNI: 431 <pre class="no-pretty-print"> 432 AndroidRuntime::getJavaVM -> GetJavaVM from <jni.h> 433 AndroidRuntime::getJNIEnv -> JavaVM::GetEnv or 434 JavaVM::AttachCurrentThread from <jni.h>. 435 </pre> 436 </li> 437 438 <li>El smbolo {@code property_get} de {@code libcutils.so} puede 439 reemplazarse por la API pblica {@code alternative __system_property_get}. 440 Para hacerlo, usa {@code __system_property_get} con el siguiente elemento include: 441 <pre> 442 #include <sys/system_properties.h> 443 </pre> 444 </li> 445 446 <li>El smbolo {@code SSL_ctrl} de {@code libcrypto.so} debe 447 reemplazarse por una versin local de la aplicacin. Por ejemplo, debes establecer un vnculo esttico de 448 {@code libcyrpto.a} en tu archivo {@code .so} o incluir un vnculo dinmico propio de 449 {@code libcrypto.so} de BoringSSL u OpenSSL en tu aplicacin. 450 </li> 451 </ul> 452 453 <h2 id="afw">Android for Work</h2> 454 <p> 455 Android N contiene cambios para aplicaciones orientadas a Android for Work, entre los que se incluyen 456 modificaciones en la instalacin de certificados, el restablecimiento de contraseas, la gestin de usuarios 457 secundarios y el acceso a identificadores de dispositivos. Si creas aplicaciones para entornos de 458 Android for Work, debes estudiar estos cambios y modificar 459 tu aplicacin segn corresponda. 460 </p> 461 462 <ul> 463 <li>Debes usar un instalador de certificados delegados para que el controlador de polticas de dispositivos (DPC) pueda 464 configurarlo. Para aplicaciones de propietarios de perfiles y de dispositivos orientadas al SDK de Android N, debes 465 usar el instalador de certificados delegados para que el 466 DPC llame a 467 <code>DevicePolicyManager.setCertInstallerPackage()</code>. Si el instalador 468 no est instalado de antemano, el sistema emite una 469 <code>IllegalArgumentException</code>. 470 </li> 471 472 <li>Las restricciones de restablecimiento de contraseas para administradores de dispositivos ahora se aplican a los propietarios de 473 perfiles. Los administradores de dispositivos ya no pueden usar 474 {@code DevicePolicyManager.resetPassword()} para borrar contraseas ni modificar 475 las que ya estn establecidas. No obstante, pueden establecer una contrasea, aunque solo 476 cuando el dispositivo no tiene contrasea, PIN ni patrn. 477 </li> 478 479 <li>Los propietarios de dispositivos y perfiles pueden administrar cuentas aun cuando haya 480 restricciones. Tienen la posibilidad de llamar a las API de administracin de cuentas 481 incluso al haber restricciones <code>DISALLOW_MODIFY_ACCOUNTS</code> para el usuario. 482 </li> 483 484 <li>Los propietarios de dispositivos pueden administrar usuarios secundarios de manera ms sencilla. Cuando un dispositivo 485 funciona en el modo de propietario de dispositivo, automticamente se establece la restriccin <code>DISALLOW_ADD_USER</code> 486 . Esto evita que los usuarios creen usuarios secundarios no 487 administrados. A su vez, los mtodos <code>CreateUser()</code> y 488 <code>createAndInitializeUser()</code> han sido dados de baja; los reemplaza el nuevo mtodo 489 <code>DevicePolicyManager.createAndManageUser()</code>. 490 </li> 491 492 <li>Los propietarios de dispositivos pueden acceder a identificadores de dispositivos. Tienen la posibilidad de acceder a la 493 direccin MAC de Wi-Fi de un dispositivo a travs de 494 <code>DevicePolicyManagewr.getWifiMacAddress()</code>. Si nunca se habilit la funcin Wi-Fi 495 en el dispositivo, este mtodo devuelve un valor {@code null}. 496 </li> 497 498 <li>La configuracin Work Mode controla el acceso a las aplicaciones de trabajo. Cuando este ajuste est desactivado, el 499 launcher del sistema indica que las aplicaciones de trabajo no estn disponibles atenundolas. Para volver 500 a restaurar el comportamiento normal, habilita el modo de trabajo nuevamente. 501 </ul> 502 503 <p> 504 Para obtener ms informacin sobre los cambios de Android for Work en Android N, consulta 505 <a href="{@docRoot}preview/features/afw.html">Actualizaciones de Android for Work</a>. 506 </p> 507 508 <h2 id="annotations">Retencin de anotaciones</h2> 509 510 <p> 511 Android N soluciona un error por el cual la visibilidad de las anotaciones se haba ignorado. 512 Este problema permiti que el tiempo de ejecucin accediera a anotaciones a las que no deba 513 tener acceso. Entre estas anotaciones se incluyen las siguientes: 514 </p> 515 516 <ul> 517 <li>{@code VISIBILITY_BUILD}: destinada a ser visible solo en el momento de compilacin.</li> 518 <li>{@code VISIBILITY_SYSTEM}: destinada a ser visible en el tiempo de ejecucin, pero nicamente al 519 sistema subyacente.</li> 520 </ul> 521 522 <p> 523 Si tu aplicacin se basa en este comportamiento, agrega una poltica de retencin para las anotaciones que deben 524 estar disponibles en el tiempo de ejecucin. Para ello, usa {@code @Retention(RetentionPolicy.RUNTIME)}. 525 </p> 526 527 <h2 id="other">Otros aspectos importantes</h2> 528 529 <ul> 530 <li>Cuando una aplicacin funcione en Android N, pero est orientada a un nivel de API inferior, 531 y el usuario modifique el tamao de pantalla, el proceso de la aplicacin finalizar. La aplicacin 532 debe tener capacidad para manejar correctamente esta situacin. De lo contrario, se bloquear 533 cuando el usuario la restaure desde Recents. 534 535 <p> 536 Debes probar tu aplicacin para controlar que no tenga lugar 537 este comportamiento. 538 Puedes hacerlo produciendo un error idntico 539 al finalizarla manualmente a travs del panel DDMS. 540 </p> 541 542 <p> 543 Las aplicaciones orientadas a Android N y versiones posteriores no finalizarn automticamente por cambios en la densidad; 544 sin embargo, es posible que respondan en forma deficiente a los cambios en la configuracin. 545 </p> 546 </li> 547 548 <li> 549 En Android N, las aplicaciones deben tener capacidad para manejar correctamente los cambios de configuracin 550 y no deben bloquearse durante inicios posteriores. Puedes verificar el comportamiento de las aplicaciones 551 modificando el tamao de la fuente (<strong>Setting</strong> > 552 <strong>Display</strong> > <strong>Font size</strong>) y restaurndolas 553 desde Recents. 554 </li> 555 556 <li> 557 Debido a un error en versiones anteriores de Android, el sistema no indicaba la escritura 558 a un socket del TCP en el subproceso principal como una violacin del modo strict. En Android N, se corrige este error. 559 Las aplicaciones que tienen este comportamiento, ahora emiten una {@code android.os.NetworkOnMainThreadException}. 560 Generalmente, realizar operaciones de red en el subproceso principal no es una buena idea porque estas operaciones 561 suelen tener una latencia alta de cola que genera mensajes que indican que la aplicacin no responde y bloqueos. 562 </li> 563 564 <li> 565 De manea predeterminada, la familia de mtodos {@code Debug.startMethodTracing()} ahora 566 almacena los resultados en el directorio especfico del paquete en el almacenamiento compartido, 567 en lugar de hacerlo en el nivel superior 568 de la tarjeta SD. Esto significa que las aplicaciones ya no tienen que solicitar el permiso {@code WRITE_EXTERNAL_STORAGE} para usar estas API. 569 </li> 570 571 <li> 572 Muchas API de la plataforma han comenzado a controlar en busca del envo de cargas grandes 573 a travs de transacciones {@link android.os.Binder}. Adems, el 574 sistema ahora vuelve a emitir {@code TransactionTooLargeExceptions} 575 como {@code RuntimeExceptions}, en lugar de registrarlas o suprimirlas silenciosamente. Un 576 ejemplo comn es almacenar demasiados datos en 577 {@link android.app.Activity#onSaveInstanceState Activity.onSaveInstanceState()}, 578 lo que hace que {@code ActivityThread.StopInfo} emita una 579 {@code RuntimeException} cuando la aplicacin se orienta a Android N. 580 </li> 581 582 <li> 583 Si una aplicacin publica tareas {@link java.lang.Runnable} en una {@link android.view.View}, y 584 la {@link android.view.View} 585 no est anexada a una ventana, el sistema 586 pone en cola la tarea {@link java.lang.Runnable} con la {@link android.view.View}. 587 La tarea {@link java.lang.Runnable} no se ejecuta hasta que la 588 {@link android.view.View} est anexada 589 a una ventana. Este comportamiento soluciona los siguientes errores: 590 <ul> 591 <li>Si una aplicacin publicaba una {@link android.view.View} desde un subproceso que no fuera el subproceso de la IU 592 de la ventana prevista, la tarea {@link java.lang.Runnable} poda ejecutarse en el subproceso incorrecto. 593 </li> 594 <li>Si la tarea {@link java.lang.Runnable} se publicaba desde un subproceso que no fuera 595 un subproceso de looper, la aplicacin poda exponer la terea {@link java.lang.Runnable}.</li> 596 </ul> 597 </li> 598 599 <li> 600 Si una aplicacin en Android N con el permiso 601 {@link android.Manifest.permission#DELETE_PACKAGES DELETE_PACKAGES} 602 intentaba borrar un paquete instalado por otra aplicacin, 603 el sistema solicitaba la confirmacin del usuario. En este escenario, las aplicaciones deban esperar recibir el estado 604 {@link android.content.pm.PackageInstaller#STATUS_PENDING_USER_ACTION STATUS_PENDING_USER_ACTION} 605 al invocar 606 {@link android.content.pm.PackageInstaller#uninstall PackageInstaller.uninstall()}. 607 </li> 608 609 </ul> 610 611