Home | History | Annotate | Download | only in nougat
      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 &gt;
    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 -&gt; GetJavaVM from &lt;jni.h&gt;
    433 AndroidRuntime::getJNIEnv -&gt; JavaVM::GetEnv or
    434 JavaVM::AttachCurrentThread from &lt;jni.h&gt;.
    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 &lt;sys/system_properties.h&gt;
    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> &gt;
    552 <strong>Display</strong> &gt; <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