¿Cómo tener la IU no bloqueada durante una operación prolongada?

Tengo un botón, cuando el usuario hace clic en él, actualizará toda la interfaz de usuario (vista de texto, gráficos). El contenido de la interfaz de usuario proviene de una base de datos SQLite, denominé la función de actualización loading (). Se podría imaginar, dentro de la carga (), hay muchas operaciones de base de datos y actualizaciones de la interfaz de usuario. Cuando el tamaño de los datos aumenta, el tiempo para que se realice esta carga () es mayor, por lo que el botón permanecerá presionado durante más tiempo.

Intenté usar asynctask para lidiar con esta situación para que salga un cuadro de diálogo de progreso en lugar del botón congelado, pero no puedo colocar el método loading () en el doinbackground () de asynctask porque doinbackground () no puede tocar los componentes de la interfaz de usuario que se declaran del método onCreate () de su actividad.

No quiero reescribir la función loading ().

¿Alguna otra forma de hacerlo? Por favor, ayuda, y si pudieras, proporciona algunos ejemplos, te lo agradezco.

Respuesta 1

Para utilizar AsyncTask en esta instancia, desea cargar los datos en doInBackGround () y llenar algún tipo de estructura de datos u objeto de modelo con los resultados. Luego devuélvelo como resultado de doInBackground ().

onPostExecute () se ejecuta en el hilo de la interfaz de usuario y puede usar el resultado para completar y actualizar sus componentes.

Respuesta: 2

La mejor opción sería, en mi opinión, utilizar una AsyncTask para hacer este trabajo. Puede activar la actualización de progreso desde loadInBackground para obtener alguna actualización de la interfaz de usuario cuando lo necesite (llame publishProgress()desde el subproceso de fondo de la tarea y onProgressUpdate()se llamará al método en el hilo de la IU).

Otra opción: hacer el trabajo en un hilo separado o en un servicio en segundo plano. Luego, desde su IU, puede activar una actualización cada X milisegundos utilizando un controlador.

Respuesta: 3

Puede ejecutar cosas en el hilo de la interfaz de usuario utilizando runOnUiThread(Runnable). También podría usar una combinación de Thready Handler.

Respuesta: 4

Estoy tratando de agregar sonido en el programa. No tengo experiencia en cómo agregar sonido en el programa. Estoy intentando esto pero este código me da la excepción "nulo". No sé qué argumento tengo que pasar en el juego Sonido ...

Este problema con el método Java protegido void finalize (), traté de buscar preguntas perceptibles sobre esto, pero aún no puedo encontrar la manera de resolverlo, por lo que uno de mi clase de proyecto está llamando a esto ...

Estoy tratando de usar JavaCV para implementar el reconocimiento de imágenes usando el algoritmo ORB. Según algunos documentos [1], [2], el descriptor de punto clave ORB es una cadena binaria. Entonces, ¿cómo puedo obtener esta cadena binaria después de ...

Estoy desechando la página web usando la biblioteca Jsoup seleccionando atributos de clase que contienen una cadena "nav" en ellos. Este es el código que busca HTML del sitio: var bodyString = Jsoup.connect (url) ...