¿Qué contenido aparecerá en las preguntas de la entrevista de Android?
Este es un artículo que presenta las preguntas de la entrevista de Android. ¡Echémosle un vistazo juntos!
1. ¿Los procesos de Android dvm y los procesos de aplicación de Linux son el mismo concepto?
Respuesta: DVM es una máquina virtual dalivk. Cada aplicación de Android se ejecuta en su propio proceso y tiene una instancia de máquina virtual dalivk. Cada DVM es un proceso en Linux. Por lo que puede considerarse como el mismo concepto.
2.¿Qué tipo de animaciones hay en android? ¿Cuáles son sus características y diferencias?
Respuesta: Hay dos tipos, uno es animación de interpolación y el otro es animación de fotograma. Entre la animación, esta implementación puede hacer que el componente de vista se mueva, acerque o aleje y produzca cambios de transparencia. La animación de fotogramas, un método de animación tradicional, se implementa reproduciendo secuencialmente imágenes dispuestas, similar a una película.
3. El principio de la base del controlador:
Respuesta: Android proporciona un controlador y un looper para cumplir con la comunicación entre subprocesos. Principio del manejador primero en entrar, primero en salir. El looper se utiliza para gestionar el intercambio de mensajes entre objetos en un hilo específico.
1) looper: un hilo puede generar un objeto looper, que gestiona la cola de mensajes en este hilo)
<. p>2) Controlador: puede construir un objeto controlador para comunicarse con el looper para enviar nuevos mensajes a la cola de mensajes o para recibir mensajes enviados por el looper (recuperados de la cola de mensajes);3) cola de mensajes: se utiliza para almacenar mensajes colocados por hilos.
4) Hilo: el hilo de la interfaz de usuario suele ser el hilo principal y, cuando Android inicia el programa, creará una cola de mensajes para él.
Actualización de la vista de Android:
4. p>
Respuesta: Hay muchas formas de actualizar View en Android y se deben distinguir diferentes escenarios de aplicación al usarlas. Siento que lo más importante es distinguir: el uso de subprocesos múltiples y doble almacenamiento en búfer.
1) No utilice subprocesos múltiples ni almacenamiento en búfer doble.
Esta situación es la más simple, solo desea volver a dibujar la interfaz de usuario cuando cambia la vista. Solo necesita llamar explícitamente al método invalidate() en el objeto Ver en la Actividad. El sistema llamará automáticamente al método onDraw() de la Vista.
2). Utilice subprocesos múltiples y no utilice doble búfer.
En este caso, es necesario abrir un nuevo subproceso y será difícil para el subproceso recién abierto acceder. el objeto Ver. El acceso forzado informará: android.view.ViewRoot$CalledFromWrongThreadException: solo el hilo original que creó una jerarquía de vistas puede tocar sus vistas.
En este momento, debe crear una subclase que herede android.os.Handler. y anule el método handleMessage(Messagemsg). android.os.Handler puede enviar y procesar mensajes. Debe enviar mensajes para actualizar la interfaz de usuario en la Actividad y luego procesar los mensajes en su Controlador (puede usar clases internas anónimas) (porque las clases internas anónimas pueden acceder a las variables de la clase principal). Puede llamar directamente al método invalidate() en el objeto Ver). Es decir: crear y enviar un Mensaje en un hilo nuevo, y luego capturar y procesar el mensaje en el hilo principal.
3). Utilice subprocesos múltiples y almacenamiento en búfer doble.
SurfaceView en Android es una subclase de View y también implementa almacenamiento en búfer doble.
Puede definir una subclase e implementar la interfaz SurfaceHolder.Callback. Dado que implementa la interfaz SurfaceHolder.Callback, el nuevo hilo no necesita la ayuda de android.os.Handler. El método lockCanvas() en SurfaceHolder puede bloquear el lienzo, y es más conveniente llamar a unlockCanvasAndPost(canvas) para desbloquearlo (mostrar) después de dibujar una nueva imagen.
5. Hablemos del principio del modo MVC y su aplicación en Android:
Respuesta: Android recomienda oficialmente que el desarrollo de aplicaciones adopte el modo MVC. ¿Qué es mvc?
mvc es la abreviatura de modelo, vista y controlador. mvc contiene tres partes:
l Objeto modelo: es la parte principal de la aplicación y de todo el negocio. Toda la lógica debe escribirse en esta capa.
2 Objeto Ver: Es la parte de la aplicación encargada de generar la interfaz de usuario. También es la única capa que los usuarios pueden ver en toda la arquitectura MVC. Recibe entradas del usuario y muestra los resultados del procesamiento.
3 Objeto controlador: es la parte que controla la visualización de los datos de la interfaz de usuario y actualiza el estado del objeto modelo en función de la entrada del usuario. El controlador es una función de navegación más importante si se desea utilizar. relacionado con el usuario Deje que m maneje el incidente.
Android fomenta el acoplamiento débil y la reutilización de componentes. Las realizaciones específicas de MVC en Android son las siguientes:
1) Capa de vista (vista): los archivos XML se utilizan generalmente para describir. Por supuesto, si sabe más sobre Android, definitivamente puede pensar en usar javascript + html como capa de vista en Android. Por supuesto, debe usar java y javascript aquí. Afortunadamente, Android proporciona una implementación de comunicación muy conveniente entre ellos.
2) Controlador: la responsabilidad de la capa de control de Android generalmente recae sobre muchas actividades. Esta oración también implica que el código no debe escribirse en la actividad, sino que debe entregarse a través de la lógica empresarial del modelo. La capa se procesa. Otra razón para esto es que el tiempo de respuesta de la actividad en Android es de 5 segundos. Si se colocan aquí operaciones que consumen mucho tiempo, el programa se reciclará fácilmente.
3) Capa de modelo (modelo): las operaciones en bases de datos, redes, etc. deben manejarse en el modelo. Por supuesto, las operaciones como los cálculos comerciales también deben colocarse en esta capa.
6.Ciclo de vida de la actividad:
Respuesta: onCreate: cree una interfaz aquí y realice algún trabajo de inicialización de datos
onStart: en este paso se vuelve visible y no interactivo para el usuario
onResume: se vuelve interactivo con el usuario (el sistema de pila de actividades administra la parte superior de estas actividades a través de la pila. Después de que se abre la pila, regresa a la actividad anterior).
onPause: este paso es visible pero no interactivo. El sistema detendrá las animaciones y otras cosas que consumen la CPU. Como sabes por la descripción anterior, debes guardar algunos de tus datos aquí, porque en este momento. vez que usted La prioridad del programa se reduce y puede ser retirado por el sistema. Los datos guardados aquí deberían volverse invisibles y sobrescribirse con la siguiente actividad después de
onstop:
onDestroy: este es el último método llamado antes de que se elimine la actividad. Puede ser que sea externo. la clase llama al método de finalización o el sistema lo elimina temporalmente para ahorrar espacio
7. Deje que la Actividad se convierta en una ventana:
Respuesta: Configuración del atributo de Actividad: Sí A veces haré una aplicación. que flota en la interfaz principal del teléfono.
Esto solo requiere configurar el tema de la Actividad, es decir, agregar la oración donde se define la Actividad en Manifest.xml:
android :theme="@android:style/Theme.Dialog"
Si es un efecto translúcido:
android:theme="@android:style/Theme.Translucent"
8. Cinco diseños comúnmente utilizados en Android: p >
Respuesta: diseño lineal LinearLayout; diseño absoluto AbsoluteLayout; diseño de tabla TableLayout; diseño relativo de FrameLayout;
9. : SharedPreferences; SQLite; contentProvider; Network
10. Explique la relación entre Message, Handler, Message Queue y Looper en el modelo de subproceso único:
Respuesta: Handler. Obtiene el objeto looper en el hilo actual. El looper se utiliza para recuperar el mensaje de la cola de mensajes que almacena el mensaje, y luego el controlador distribuye y procesa el mensaje.
11. ¿Cuál es el nombre completo de AIDL? ¿Cómo funciona? ¿Qué tipos de datos puede procesar?
Respuesta: lenguaje de descripción de la interfaz de Android AIDL (Lenguaje de definición de interfaz de Android). /p>
12. Hay varios navegadores instalados en el sistema. ¿Puedo especificar un determinado navegador para acceder a una página específica? Explique el motivo:
Respuesta: Traiga los parámetros enviando directamente el Uri o mediante el atributo de datos en el filtro de intención en el manifiesto. El código es el siguiente:
Intent intent = new Intent();
Intent.setAction("android.intent.action.View");
Uri uriBrowsers = Uri.parse("");
Intent.setData(uriBrowsers);
//Nombre del paquete, actividad a abrir
intención. setClassName(" com.android.browser","com.android.browser.BrowserActivity");
startActivity(intent);
13. ?
Respuesta: La definición de ANR:
En Android, si su aplicación no responde durante un período de tiempo, el sistema le indicará al usuario "La aplicación no responde" (ANR). :la aplicación no responde). Por lo tanto, es importante diseñar la capacidad de respuesta del programa para que el sistema no muestre ANR al usuario.
Cómo evitarlo:
Primero, examinemos por qué sucede en las aplicaciones de Android y cuál es la mejor manera de crear aplicaciones para evitar ANR.
Las aplicaciones de Android generalmente se ejecutan en un hilo separado (por ejemplo: principal), lo que significa que si lo que hace su aplicación lleva mucho tiempo en el hilo principal, provocará un cuadro de diálogo ANR, porque su La aplicación no se da la oportunidad de manejar eventos de entrada o transmisiones de intención.
Por lo tanto, cualquier solicitud que se ejecute en el hilo principal realiza el menor trabajo posible. En particular, la actividad debe realizar la menor cantidad de operaciones de creación posible en sus métodos clave del ciclo de vida (onCreate() y onResume()).
Las operaciones que potencialmente requieren mucho tiempo, como operaciones de red o de bases de datos, o cálculos que consumen mucho tiempo, como cambiar el tamaño de los mapas de bits, deben completarse en subprocesos secundarios (o, en el caso de operaciones de bases de datos, mediante solicitudes asincrónicas). Sin embargo, eso no significa que su hilo principal se bloquee allí esperando a que se complete el hilo secundario, ni llama a Thread.wait() o Thread.sleep(). La alternativa es: el hilo principal debe proporcionar un controlador para el hilo secundario para que pueda enviarse al hilo principal cuando esté completo. Diseñar su aplicación de esta manera garantizará que su hilo principal siga respondiendo a la entrada y evitará cuadros de diálogo ANR causados por el tiempo de espera del evento de entrada de 5 segundos. Este enfoque se debe seguir en otros subprocesos que muestran la interfaz de usuario, ya que todos se ven afectados por el mismo tiempo de espera.
Las restricciones especiales en el tiempo de ejecución de IntentReceiver significan que debería hacer: realizar trabajos pequeños y triviales en segundo plano, como guardar configuraciones o registrar una notificación. Al igual que con otros métodos llamados en el hilo principal, las aplicaciones deben evitar realizar operaciones o cálculos que consuman mucho tiempo en BroadcastReceiver, pero tampoco es necesario realizar estas tareas en subprocesos secundarios (debido al corto ciclo de vida de BroadcastReceiver). Si es necesario realizar una acción que requiere mucho tiempo en respuesta a la transmisión del Intent, la aplicación debe iniciar un Servicio. Por cierto, también debes evitar iniciar una actividad dentro de un receptor de intenciones, ya que creará una nueva pantalla y robará el foco de la aplicación que el usuario está ejecutando actualmente. Si su aplicación necesita mostrar algo al usuario en respuesta a una transmisión de intención, debe usar un Administrador de notificaciones para hacerlo.
En términos generales, en las aplicaciones, entre 100 y 200 ms es el umbral de tiempo para que los usuarios perciban el bloqueo. A continuación se ofrecen algunos consejos para evitar el ANR y ayudar a que su aplicación tenga una capacidad de respuesta fluida.
Si su aplicación está funcionando en segundo plano en respuesta a la entrada del usuario, puede mostrar el progreso del trabajo (ProgressBar y ProgressDialog son útiles en esta situación). Especialmente para los juegos, los cálculos de movimiento se realizan en subprocesos. Si su aplicación tiene un proceso de inicialización que requiere mucho tiempo, considere mostrar una pantalla de presentación o mostrar rápidamente la pantalla principal y completar la información de forma asincrónica. En ambos casos, debes mostrar el progreso continuo para que el usuario no piense que el programa está congelado.
14. ¿Qué situaciones provocarán el cierre forzado? ¿Cómo evitarlo? ¿Se puede detectar la excepción que lo causa?
Respuesta: Los punteros nulos, etc. pueden causar ForceClose; puede mirar Logcat y encontrar el código del programa correspondiente para resolver el error.
15. Ciclo de vida de la actividad al cambiar entre pantallas horizontales y verticales:
Respuesta:
1) Cree una nueva actividad e imprima cada ciclo de vida
p>
p>
2) Ejecute la actividad y obtenga la siguiente información:
onCreate()à
onStart()à
onResume()à
3) Presione ctrl+F12 para cambiar a la pantalla horizontal
onSaveInstanceState()à
onPause()à
onStop()à p>
onDestroy()à
onCreate()à
onStart()à
onRestoreInstanceState()à
onResume ()à
4) Al presionar ctrl+f12 para cambiar a la pantalla vertical, descubrí que el mismo registro se imprimió dos veces
onSaveInstanceState()à
onPause ()à
onStop()à
onDestroyà
onCreate()à
onStart( )à
onRestoreInstanceState()à
onResume()à
onSaveInstanceState()à
onPause()à
onStop()à
onDestroyà
onCreate()à
onStart()à
onRestoreInstanceState()à p>
onResume() à
5) Modifique AndroidManifest.xml, agregue android:configChanges="orientation" a la Actividad y realice el paso 3
onSaveInstanceState()à
onPause()à
onStop()à
onDestroy()à
onCreate()à
onStart()à
onRestoreInstanceState()à
onResume()à
6) Modifique AndroidManifest.xml, agregue android:configChanges="orientación" a la Actividad, realice el paso 4 y descubra que no se imprimirá la misma información nuevamente, pero una línea más onConfigChanged
onSaveInstanceState()à
onPause()à
onStop()à
onDestroy()à
onCreate()à
onStart()à
onRestoreInstanceState() à
onResume()à
onConfigurationChanged()à
7) Cambie android:configChanges="orientation" en el paso 5 a
android:configChanges="orientation|keyboradHidden", Ejecute el paso 3 y solo imprima onConfigChanged
onConfigurationChanged()à
8) Cambie el android:configChanges="orie en el paso 5
ntation" a
android:configChanges="orientation|keyboradHidden", realice el paso 4
onConfigurationChanged()à
onConfigurationChanged()à
Resumen:
1) Cuando android:configChanges de la actividad no está configurado, cada ciclo de vida se llamará nuevamente al cambiar de pantalla, una vez al cambiar a la pantalla horizontal y dos veces al cambiar a la pantalla vertical.
2) Al configurar la android:configChanges="orientación" de la actividad, cada ciclo de vida se volverá a invocar al cambiar de pantalla. Solo se ejecutará una vez al cambiar a pantallas horizontales o verticales, pero una adicional. onConfigurationChanged se imprimirá al final para las pantallas verticales ()
3) Al configurar android:configChanges="orientation|keyboardHidden" de la actividad, el cambio de pantalla no volverá a llamar cada ciclo de vida, solo onConfigurationChanged(. ) se ejecutará, una vez para la pantalla horizontal y dos veces para la pantalla vertical.
Resumamos el ciclo de vida de toda la actividad:
1) Cuando la actividad actual genera eventos y aparece. Toast y AlertDialog, el ciclo de vida de la Actividad no cambiará
2) Presione la tecla INICIO mientras la Actividad se está ejecutando (lo mismo que sobrescribirla por completo)
onSavaInstanceStateà
onPauseà
onStopà
onRestartà
onStartà
onResumeà
3) No completamente cubierto, solo foco perdido:
onPauseà
onResumeà
16. ¿Cómo publicar la base de datos SQLite (archivo .db) junto con el archivo apk?
Respuesta: Puede copiar el archivo .db al directorio res aw en el proyecto Eclipse de Android. Los archivos en el directorio res aw no se comprimirán, por lo que los archivos en el directorio se pueden extraer directamente. copiarse al directorio res aw
17. ¿Cómo abrir el archivo de base de datos res aw?
Respuesta: El archivo de base de datos en el directorio res aw no se puede abrir directamente en Android. En su lugar, el archivo debe copiarse a un directorio en la memoria del teléfono o en la tarjeta SD cuando se inicia el programa por primera vez y luego abrir el archivo de la base de datos. El método básico de copia es utilizar el método getResources().openRawResource para obtener el objeto InputStream del recurso en el directorio res aw y luego escribir los datos del objeto InputStream en el archivo correspondiente en otros directorios. En el SDK de Android, puede utilizar el método SQLiteDatabase.openOrCreateDatabase para abrir un archivo de base de datos SQLite en cualquier directorio.
18. ¿Cuáles son las clases para analizar xml en Android? ¿Cuál se recomienda oficialmente? Además de sus principios y diferencias:
Respuesta: Hay tres métodos principales de análisis XML, SAX, DOM y PULL. Es relativamente fácil para nosotros usar Dom para el desarrollo regular en PC, pero algunas bases de datos sensibles al rendimiento o teléfonos móviles todavía usan principalmente la lectura SAX como unidireccional. Las ventajas son: no ocupa espacio en la memoria y es conveniente. analizar atributos, pero la desventaja es que no es muy conveniente anidar varias ramas.
El método DOM cargará el archivo XML completo en la memoria. La red de desarrollo de Android aquí les recuerda a todos que este método se puede combinar bien con XPath en la búsqueda. Se recomienda si la cantidad de datos no es grande y PULL se usa a menudo en J2ME. para el procesamiento de nodos, es similar al método SAX y también ahorra memoria. En J2ME, a menudo usamos la biblioteca KXML para analizar.
19. ¿Cuál es la diferencia entre DDMS y TraceView?
Respuesta: DDMS es un visor de ejecución de programas, en el que se puede ver información como subprocesos y pilas, mientras que TraceView es un analizador de rendimiento del programa
p>
20. Hable sobre el mecanismo IPC de Android:
Respuesta: IPC es la abreviatura de comunicación de procesos internos y es el recurso para compartir "canalizaciones con nombre". . El mecanismo IPC en Android permite que la Actividad y el Servicio interactúen en cualquier momento. Por lo tanto, este mecanismo en Android solo es adecuado para la comunicación entre Actividad y Servicio. Es similar a la invocación de métodos remotos y el modo C/S. Defina la interfaz IPC definiendo el archivo de interfaz AIDL. El lado del Servidor implementa la interfaz IPC y el lado del Cliente llama al proxy local de la interfaz IPC.
21. ¿Qué es NDK?
Respuesta: NDK es una colección de herramientas
NDK proporciona una serie de herramientas para ayudar a los desarrolladores a desarrollar rápidamente C/C++ dinámico. biblioteca y puede empaquetar automáticamente aplicaciones so y java en paquetes apk
NDK integra un compilador cruzado, proporciona los archivos mk correspondientes y aísla las diferencias en CPU, plataforma, etc. para el desarrollo. El personal puede crearlo simplemente modificando el archivo mk
22. Describe la arquitectura del sistema de Android:
Respuesta: La arquitectura del sistema Android se divide en la capa del kernel de Linux, biblioteca de tiempo de ejecución y aplicación. capa de marco y capa de aplicación.
Capa del kernel de Linux: Responsable del controlador de hardware, red, energía, seguridad del sistema, administración de memoria y otras funciones.
Biblioteca de tiempo de ejecución y androidruntion: Biblioteca de tiempo de ejecución: es decir, la parte de la biblioteca de funciones c/c++, la mayoría de las cuales son bibliotecas de funciones de código abierto, como webkit, que es responsable del funcionamiento del navegador web de Android. ; como las bibliotecas de funciones estándar de C libc, openssl, sqlite, etc., por supuesto, también incluyen 2dsgl y 3dopengles que admiten el desarrollo de juegos. En términos de multimedia, existe el marco mediaframework para admitir la reproducción y visualización de varios tipos de audio. Archivos visuales y gráficos, como mpeg4, h.264, mp3, numerosos formatos de archivos multimedia como aac, amr, jpg y png. Androidruntion es responsable de interpretar y ejecutar el código de bytes en formato Dalvik generado
Arquitectura de software de aplicación: los desarrolladores de aplicaciones Java utilizan principalmente la API encapsulada por esta capa para un desarrollo rápido.
Capa de aplicación: esta capa es la capa de aplicación de Googlemaps, correo electrónico, mensajería instantánea, navegador, etc. integrados en Android. Los programas desarrollados por desarrolladores de Java también se encuentran en esta capa. Y tiene el mismo estatus que las aplicaciones integradas. Puede llamar a las aplicaciones integradas y reemplazarlas.