¿Cuáles son las preguntas de la entrevista de Android?
1. ¿El proceso DVM de Android es el mismo que el proceso de Linux y el proceso de aplicación?
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. Entonces se puede considerar el mismo concepto.
2.2.¿Qué tipos de animaciones tiene 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. La animación de interpolación puede hacer que los componentes de la vista se muevan, agranden o reduzcan y produzcan cambios de transparencia. La animación de fotogramas es un método de producción de animación tradicional que se logra reproduciendo secuencialmente imágenes dispuestas, similar a las películas.
3.3. Principio del sistema procesador:
Respuesta: Android proporciona un controlador y un looper para satisfacer la comunicación entre subprocesos. Los procedimientos de procesamiento son el primero en entrar, el primero en salir. Looper se utiliza para gestionar el intercambio de mensajes entre objetos dentro de un hilo específico.
1) looper: un hilo puede generar un objeto looper para administrar la cola de mensajes en este hilo.
2) Controlador: puede construir un objeto controlador para comunicarse con el looper para enviar nuevos mensajes a la cola de mensajes o recibir mensajes enviados por el looper (tomado de la cola de mensajes).
3) cola de mensajes: se utiliza para almacenar mensajes enviados por hilos.
4) Hilo: el hilo de la interfaz de usuario suele ser el hilo principal y Android creará una cola de mensajes cuando inicie el programa.
4.4. Actualización de la vista de Android:
Respuesta: Hay muchas formas de actualizar la Vista en Android y se deben distinguir diferentes aplicaciones al usarlas. Creo que lo más importante es distinguir entre 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 sencilla. Por lo general, solo desea volver a dibujar la interfaz de usuario cuando cambia la vista. Simplemente llame explícitamente al método invalidate() en el objeto de vista de la actividad. El sistema llamará automáticamente al método onDraw() de la vista.
2). Utilice subprocesos múltiples en lugar de doble almacenamiento en búfer.
En este caso, es necesario iniciar un nuevo hilo. El hilo recién abierto no puede acceder fácilmente al objeto de visualización. Se informará el acceso forzado: Android.view.viewroot$ceivedfromrownerThreadException: solo el hilo original que creó la 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 un mensaje para actualizar la interfaz de usuario en la actividad y luego manejar el mensaje en su controlador (puede usar una clase interna anónima) (debido a que las clases internas anónimas pueden acceder a las variables de la clase principal, puede llamar directamente a invalidar (en el Ver objeto) )método). Es decir: crear y enviar el mensaje en un hilo nuevo, luego capturar y procesar el mensaje en el hilo principal.
3). Utilice subprocesos múltiples y doble buffer.
SurfaceView en Android es una subclase de View y también implementa doble almacenamiento en búfer. Puedes definir su subclase e implementar SurfaceHolder. Interfaz de devolución de llamada. Debido a la implementación de SurfaceHolder.
Interfaz de devolución de llamada, el nuevo hilo no necesita la ayuda de android.os.Handler. El método lockCanvas () en SurfaceHolder puede bloquear el lienzo, lo cual es conveniente para llamar a unlockCanvasAndPost (canvas) para desbloquear (mostrar) después de dibujar una nueva imagen.
5. Hable sobre el principio del modo MVC y su aplicación en Android:
Respuesta: La recomendación oficial de Android es que el desarrollo de aplicaciones debe adoptar el modo MVC. ¿Qué es mvc?
Mvc es la abreviatura de modelo, vista y controlador. MVC consta de tres partes:
l Objeto modelo: es la parte principal de la aplicación y toda la lógica empresarial 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 la entrada del usuario y muestra los resultados del procesamiento.
3 Objeto de control: 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. Es la función de navegación más importante del controlador. Los eventos relacionados que el usuario quiere abandonar son manejados por M.
Android fomenta el acoplamiento débil y la reutilización de componentes. La realización específica de MVC en Android es la siguiente:
1) Capa de vista: los archivos XML generalmente se usan para describir la interfaz, que es fácil de introducir al usarla. Por supuesto, si sabe más sobre Android, definitivamente puede pensar en usar JavaScript HTML como capa de visualización en Android. Por supuesto, aquí se requiere la comunicación entre Java y JavaScript. Afortunadamente, Android proporciona una comunicación muy cómoda entre ellos.
2) Controlador: La reasignación de la capa de control de Android suele recaer sobre muchas Actividades. Esta oración también implica que no debe escribir código en Actividades, sino que debe ser manejado por la capa de lógica de negocios del modelo de entrega de actividades. Otra razón es que el tiempo de respuesta de Activeness en Android es de 5 segundos. Si se realizan aquí operaciones que requieren mucho tiempo, el programa se reciclará fácilmente.
3) Capa de modelo: Las operaciones en la base de datos y la red deben manejarse en el modelo. Por supuesto, operaciones como los cálculos comerciales también deben colocarse en esta capa.
6.6 ciclo de vida. Actividad:
Respuesta: onCreate: cree una interfaz aquí y realice algunos trabajos de inicialización de datos.
OnStart: En este punto, se vuelve visible para el usuario y no interactivo.
OnResume: Vuélvete interactivo con el usuario (en el nivel superior del sistema de pila de actividades que administra estas actividades con una pila, después de ejecutar la pila emergente, volverá a la actividad anterior).
OnPause: este paso es visible pero no interactivo. El sistema detendrá las animaciones y otras cosas que consumen la CPU. De la descripción anterior, usted sabe que debe guardar algunos de sus datos aquí, porque en este momento, la prioridad de su programa se reduce y el sistema puede retirarlo. Los datos guardados aquí deberían volverse invisibles en
Onstop: y ser sobrescritos por la siguiente actividad.
OnDestroy: Este es el último método llamado antes de finalizar la actividad. Puede ser que la clase externa que llamó al método de finalización o el sistema lo eliminó temporalmente para ahorrar espacio.
7. Convierta la actividad en una ventana:
Respuesta: Configuración de atributos de actividad: a veces una aplicación flotará en la interfaz principal del teléfono. Esto solo requiere configurar el tema de la Actividad, que consiste en agregar una oración donde la Actividad está definida en Manifest.xml:
Android: Theme = "@ Android: style/theme.Dialog"
Si es un efecto traslúcido:
Android: Theme=" @ Android: style/theme.
"Translúcido"
Cinco diseños comúnmente utilizados en el sistema Android:
A: diseño lineal LinearLayout; diseño de tabla AbsoluteLayout; >
Cinco métodos de almacenamiento de datos en 9.9: sistema Android:
Respuesta: archivo de preferencias compartidas; proveedor de contenido SQLite
10. colas y bucles de mensajes:
Respuesta: el controlador obtiene el objeto looper en el hilo actual. El looper se utiliza para recuperar el mensaje de la cola de mensajes donde está almacenado y luego el controlador lo distribuye y procesa. mensaje
¿Cuál es el nombre completo de 11? ¿Cómo funciona?
Respuesta: AIDL (lenguaje de definición de interfaz de Android)
p>12. ¿Hay varios navegadores instalados en el sistema? ¿Puede especificar el navegador para acceder a la página especificada? Explique el motivo:
Respuesta: enviando el Uri directamente o mediante el atributo de datos del filtro de intención en el manifiesto. . para traer parámetros El código es el siguiente:
Intent Intent = new Intent();
intent set action ("Android. intent. action. view"); /p>
uri uri navegadores = uri . parse(" ");
intent .uri navegadores
//Nombre del paquete, actividad a abrir
intención . establecer nombre de clase(" com . Android . navegador ", " com . Android . navegador . actividad del navegador "); >13. ¿Qué es ANR y cómo evitarlo?
Respuesta: Definición de ANR:
En Android, si su aplicación no responde durante un período de tiempo, el sistema lo hará. avise al usuario con un cuadro de diálogo "ANR: La aplicación no responde". Por lo tanto, es muy importante diseñar la capacidad de respuesta en su programa para que el sistema no muestre ANR al usuario.
Cómo hacerlo. evitar:
Primero, investiguemos por qué sucede en las aplicaciones de Android y cómo estructurar mejor su aplicación para evitar ANR.
Las aplicaciones de Android generalmente se ejecutan en un hilo separado (por ejemplo, principal), lo que significa que si su aplicación pasa mucho tiempo en el hilo principal, activará el cuadro de diálogo ANR porque la aplicación no se da un oportunidad de manejar eventos de entrada o transmisiones de intención.
Por lo tanto, cualquier acceso que se ejecute en el proceso principal debe ser el mínimo posible. En particular, una actividad debe realizar la menor cantidad posible de operaciones de creación 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 requieren mucho tiempo, como cambiar el tamaño de los mapas de bits, deben realizarse en subprocesos secundarios (o en el caso de operaciones de bases de datos, mediante solicitudes asincrónicas). Sin embargo, no es su hilo principal el que está esperando a que finalice el hilo secundario, ni tampoco es usted quien llama a Thread.wait() o Thread.sleep(). En cambio, el hilo principal debe proporcionar un controlador para el hilo secundario para que cuando se complete pueda enviarse al hilo principal.
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 activados por el tiempo de espera del evento de entrada de 5 segundos. Otros subprocesos que muestran la interfaz de usuario también deberían seguir esta práctica, 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 debe realizar algún trabajo pequeño y trivial en segundo plano, como guardar configuraciones o registrarse para recibir 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 no deben realizar estas tareas en subprocesos secundarios (debido al corto ciclo de vida de BroadcastReceiver). En cambio, la aplicación debería iniciar el servicio si es necesario realizar acciones que requieran mucho tiempo en respuesta a la transmisión de intención. Por cierto, también debes evitar iniciar una actividad en un Intent Receiver, ya que crea una nueva pantalla y desvía el foco del programa que el usuario actual está ejecutando. 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 una aplicación, 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 ANR y ayudar a que su aplicación parezca responsiva.
Si tu aplicación funciona en segundo plano en respuesta a la entrada del usuario, puedes mostrar el progreso del trabajo (ProgressBar y ProgressDialog son útiles en este caso). Especialmente en los juegos, los cálculos de movimiento se realizan en subprocesos secundarios. Si su programa tiene un proceso de inicialización que requiere mucho tiempo, considere mostrar una pantalla de presentación o mostrar rápidamente la pantalla de inicio 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é provocará un apagado forzado? ¿Cómo evitarlo? ¿Puedes detectar la excepción que lo causa?
Respuesta: Un puntero nulo hará que ForceClose vea Logcat y encuentre el código de programa correspondiente para resolver el error.
15. El ciclo de vida de la actividad cuando la pantalla cambia horizontal y verticalmente:
Respuesta:
1) Cree una nueva actividad e imprima cada vida. ciclo ciclo.
2) Ejecute la "actividad" para obtener la siguiente información:
onCreate()à
onStart()à
onResume () à
3) Presione Ctrl F12 para cambiar a la pantalla horizontal.
onSaveInstanceState()à
onPause()
onStop()
onDestroy()
onCreate( )à
onStart()à
onRestoreInstanceState()
onResume()à
4) Presione Ctrl F12 nuevamente para cambiar a pantalla de orientación vertical, el mismo registro se imprime dos veces.
onSaveInstanceState()à
onPause()
onStop()
onDestroyà
onCreate()à
onStart()à
onRestoreInstanceState()
onResume()à
onSaveInstanceState()à
onPause()
onStop()
onDestroyà
onCreate()à
onStart()à
onRestoreInstanceState()
onResume()à
5) Modifique AndroidManifest.xml, agregue esta actividad a Android: cambios de configuración = "orientación" y realice el paso 3.
onSaveInstanceState()à
onPause()
onStop()
onDestroy()
onCreate( )à
onStart()à
onRestoreInstanceState()
onResume()à
6) Modifique AndroidManifest.xml y agregue esto Actividad agregada a Android: cambios de configuración = "orientación", realice el paso 4. Se descubre que no se volverá a imprimir la misma información, pero se imprimirá una línea adicional de onConfigChanged.
onSaveInstanceState()à
onPause()
onStop()
onDestroy()
onCreate( )à
onStart()à
onRestoreInstanceState()
onResume()à
onConfigurationChanged()à
7) Cambie Android:config cambios = "orientación" en el paso 5 a
Android:config cambios = "Orientación | Keyborad oculto", realice el paso 3 e imprima solo enConfigChanged.
onConfigurationChanged()à
8) Cambie Android:config cambios = "orientación" en el paso 5 a
Android:config cambios = "orientación | enfocado oculto ", realice el paso 4.
onConfigurationChanged()à
onConfigurationChanged()à
Resumen:
1) Cuando Android: los cambios de configuración de actividad no están establecidos El ciclo de vida se recordará al tomar una captura de pantalla, una vez al tomar una captura de pantalla horizontal y dos veces al tomar una captura de pantalla vertical.
2) Cuando la actividad Android: config cambios = "Orientación" está configurada, el cambio de pantalla recordará cada ciclo de vida. Solo se ejecutará una vez cuando se cambie la pantalla horizontal o verticalmente, pero la pantalla vertical. se ejecutará al final. Imprimir un onConfigurationChanged().
3) Al configurar Android de la actividad: cambios de configuración = "Orientación | Teclado oculto", la captura de pantalla no llamará a cada ciclo de vida, solo se ejecutará onConfigurationChanged(), una pantalla horizontal y dos pantallas verticales.
Luego resuma todo el ciclo de vida de la actividad:
1) Cuando la actividad actual genera eventos para abrir Toast y AlertDialog, el ciclo de vida de la actividad no cambiará.
2) Pulsa la tecla INICIO mientras se ejecuta la actividad (como si estuviera completamente cubierta)
onSavaInstanceStateà
onPauseà
OnSavaInstanceStateà
onRestartà
onStartà
onResume
3) No completamente cubierto, solo pierde el foco:
onPauseà
onResume
16. ¿Cómo publicar la base de datos SQLite (archivo .db) y el archivo apk?
Puedes copiar. El archivo db se agrega al directorio res aw en el proyecto Eclipse de Android. Todos los archivos en el directorio res aw no se comprimirán, por lo que puede descomprimir los archivos directamente en este directorio. Puedes copiar. El archivo db se copia al directorio res aw.
17. ¿Cómo abrir el archivo de base de datos en el directorio res aw?
Respuesta: En Android, el archivo de base de datos en el directorio res aw no se puede abrir directamente. Debe copiar el archivo a un directorio en la memoria del teléfono o en la tarjeta SD cuando se inicia el programa por primera vez y luego. Abra el archivo de base de datos. El método básico de copia es utilizar getResources(). El método openRawResource obtiene el objeto InputStream del recurso en el directorio res aw y luego escribe los datos en el objeto InputStream en el archivo correspondiente en otros directorios. En el SDK de Android, es posible utilizar una base de datos SQLite. El método openorcreateddatabase abre un archivo de base de datos SQLite en cualquier directorio.
18.¿Qué tipos de clases de análisis xml existen en Android? ¿Cuál se recomienda oficialmente? Además de sus principios y diferencias:
Respuesta: Hay tres formas principales de analizar XML, SAX, DOM y PULL. Es relativamente fácil para nosotros usar Dom en el desarrollo normal de PC, pero algunas bases de datos o teléfonos móviles sensibles al rendimiento todavía usan SAX square. La lectura SAX es unidireccional. La ventaja es que no ocupa espacio en la memoria y es conveniente para analizar atributos. La desventaja es que no es conveniente incrustar varias ramas. El método DOM cargará el archivo XML completo en la memoria. Aquí, la Red de Desarrollo de Android les recuerda a todos que este método se puede combinar bien con XPath en la búsqueda. Si la cantidad de datos no es muy grande, se recomienda usar PULL. J2ME a menudo usa PULL para procesar mejor los nodos. Es similar al método SAX y también ahorra memoria. En J2ME, solemos utilizar la biblioteca KXML para el análisis.
¿Cuál es la diferencia entre 19 y 19? ¿DDMS y Tressiewe?
Respuesta: DDMS es un visor de ejecución de programas, donde puede ver subprocesos, pilas y otra información, y TraceView es un analizador de rendimiento de programas.
20. Hablemos del mecanismo IPC de Android:
Respuesta: IPC es la abreviatura de comunicación de procesos internos y es un recurso que disfruta de "canalizaciones con nombre". El mecanismo IPC en Android permite que actividades y servicios interactúen en cualquier momento, por lo que en Android, este mecanismo solo es aplicable a la comunicación entre actividades y servicios, similar a la invocación de métodos remotos y el acceso en modo C/S. Defina la interfaz IPC definiendo el archivo de interfaz AIDL. El servidor implementa la interfaz IPC y el cliente llama al proxy local de la interfaz IPC.
¿Qué es 21? ¿NDK?
Respuesta: NDK es una colección de herramientas.
NDK proporciona una serie de herramientas para ayudar a los desarrolladores a desarrollar rápidamente bibliotecas dinámicas C/C y pueden convertir automáticamente aplicaciones Java en paquetes apk.
NDK integra un compilador cruzado y proporciona los archivos mk correspondientes, lo que aísla las diferencias entre CPU y plataforma. Los desarrolladores pueden crearlo modificando el archivo mk.
22. Describa la arquitectura del sistema de Android:
Respuesta: La arquitectura del sistema Android se divide en la capa del kernel de Linux, la capa de tiempo de ejecución, la capa del marco de aplicación y la capa de aplicación de abajo hacia arriba. arriba.
Capa del kernel de Linux: Responsable de los controladores de hardware, red, fuente de alimentación, seguridad del sistema y gestión de la memoria.
Runtime y androidruntion: bibliotecas de funciones C/C, la mayoría de las cuales son bibliotecas de funciones de código abierto, como webkit, responsables del funcionamiento del navegador web de Android, como las bibliotecas C estándar libc, openssl, sqlite; , etc. , por supuesto, incluidos 2dsgl y 3Dpengles que apoyan el desarrollo de juegos. En términos de multimedia, existe un marco mediaframework para soportar la reproducción y visualización de diversos archivos audiovisuales y gráficos, como mpeg4-4, h.264, mp3, 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 aplicaciones: los desarrolladores de aplicaciones Java utilizan principalmente la API encapsulada en esta capa para un desarrollo rápido.
Capa de aplicación: Esta capa es la capa de aplicación de java. Google Maps, correo electrónico, mensajería instantánea y navegador integrados en Android se encuentran en esta capa, y los programas lanzados por desarrolladores de Java también se encuentran en esta capa, que tienen el mismo estatus que las aplicaciones integradas. Pueden llamar a aplicaciones integradas o reemplazarlas.