temperatura significa que pueden para greenify frost freezer freezar cuales congelar aplicaciones alimentos android database transactions

android - pueden - que significa congelar aplicaciones



¿La mejor manera de congelar y la aplicación mientras la base de datos está haciendo un trabajo de fondo pesado? (4)

La mejor manera que encontré fue crear una "actividad de carga" que siempre se carga primero y envía al usuario a la pantalla principal cuando era seguro hacerlo.

Tengo un servicio en segundo plano que levanta cosas pesadas dentro de una transacción una vez al día. Si el usuario inicia la aplicación en este momento, quiero que se quede quieto hasta que termine (alrededor de 10 segundos más o menos). ¿Cuál es la mejor manera de hacer esto en todas las actividades? Compruebe si el servicio se está ejecutando en la función "onResume" de cada actividad. ¿Y cómo sabemos cuándo se hace? Transmisiones locales, supongo ...

Las mejores prácticas alguien?

ACTUALIZACIÓN: He logrado detener "onResume" hasta que mi servicio esté listo. El problema es que el usuario acaba de ver una pantalla en blanco hasta entonces. Probé los diálogos de progreso y los diálogos regulares mientras onResume está en pausa. Pero todos se muestran solo cuando onResume regresa y eso frustra el propósito. En otras palabras, el diálogo de progreso no se "muestra" inmediatamente después de que se llame a "show ()" :(


Las transmisiones locales son buenas.

Haga que sus actividades cuestionen el servicio si está ocupado o no, y muestre un mensaje apropiado al usuario antes de finalizar la actividad.

Una vez que finalice el servicio, envíelo para que se termine.


Tendría una bandera de '' Estoy ocupado procesando '' en el db.

Y la aplicación debería verificar el inicio y luego bloquear la aplicación de una manera agradable, y luego verificar cada x segundos para ver el estado de la bandera. Podría hacer esto durante el procesamiento normal, por lo que cada acción verifica este indicador localmente y en el servidor antes de comenzar.

Parece una forma simple de bloqueo. Por lo tanto, deberá tener en cuenta la contención (configuración y desconexión de múltiples usuarios) posiblemente utilizando una disposición de tipo de semáforo.


utilice AsyncTask en su servicio para hacer un trabajo de base de datos pesado.

y use Preferencias compartidas para guardar un indicador para notificar a otras actividades que el trabajo está en progreso. Cuando la bandera es verdadera significa que el trabajo en progreso y cuando la bandera es falsa significa que se ha realizado el trabajo.

Haz algo como esto:

private class DatabaseWork extends AsyncTask<String, Integer, Long> { protected void onPreExecute () { //Set SharedPref flag = trueto notify other activities that work has been started. } protected Long doInBackground(URL... urls) { //Your database work return false; } protected void onProgressUpdate(Integer... progress) { //if you want to show progress to user } protected void onPostExecute(Long result) { //after complete your work set SharedPref flag = false to notify other activities that work has been finished. }

}

Ahora puede verificar el valor del indicador SharedPref en cada actividad en el evento Create o onResume. Si lo encontraste verdadero, entonces puedes mostrar un diálogo de progreso para decirle al usuario que espere.