SystemClock.sleep () vs. Thread.sleep () mientras espera un bucle de semáforo
Para sincronizar / cola de acceso a un recurso compartido, estoy a punto de utilizar un semáforo , ayudado por un bucle de espera.
Con el fin de no ejecutar en la vinculación de CPU, me gustaría sleep()
un poco dentro de ese lazo while.
- Desactivar el reposo en determinadas actividades
- Android, obteniendo la señal de intensidad (PhoneStateListener) mientras el dispositivo está en modo de suspensión
- ¿Cómo dormir hilo en Xamarin android y ios?
- Confusión sobre el ciclo de vida de la actividad de Android
- Android: ¿Estancias / niveles de sueño en un dispositivo Android?
Busqué la referencia de http://developer.android.com y encontré dos tales funciones del sueño () y estoy confundido en cuanto a cuál cabe qué escenario:
- Thread.sleep ()
- SystemClock.sleep ()
¿Cuál mejor se adapta al caso que describí y por qué?
- Cómo despertar el teléfono Android de dormir?
- Retardo de tiempo en Android
- ¿Por qué mi app de Android llama a Create () cuando el sueño inicia en mi vista pero no desde la pantalla de inicio?
- ¿Por qué mi aplicación Android salta los marcos cuando se llama a Thread.sleep?
- Cómo evitar dormir en Android
- Función Android Sleep / Wait / Delay
- Toast no se mostrará antes de intentar / catch Thread.sleep ()
- La captura de pulsaciones de teclas cuando el teléfono Android está en modo de suspensión profunda
En primer lugar, ¿realmente necesita un bucle de espera? Normalmente puede solucionar sus problemas mediante notificaciones adecuadas, es decir, tener un objeto, llamando a wait () y notify () en él u otros medios (como una cola de bloqueo o Semaphore.acquire () en su caso).
Dicho esto, si realmente quieres un bucle de sondeo (que realmente no deberías hacer a menos que tengas que hacerlo), me quedaría con Thread.sleep (). No hay mucha diferencia, como dice la documentación, excepto que tiene la opción de interrumpir un Thread.sleep (). No te deshagas de la opción de hacerlo.
Tenga en cuenta que en caso de Thread.sleep (), usted va a tener que coger esa excepción – si eres extremadamente perezoso, probablemente se quedará con SystemClock.sleep ().
La verdad es:
Thread.sleep (n) podría ser interrumpido dentro de una llamada como AsyncTask utilizando asyncTask.cancel (true)
SystemClock.sleep (n) parece ignorar cualquier comando interrumpido, por lo que podría ser un riesgo de pérdida de memoria cuando se utiliza similar como aquí: https://github.com/square/leakcanary/blob/master/leakcanary-sample/ Src / main / java / com / ejemplo / leakcanary / MainActivity.java
- Cómo establecer la misma anchura y altura de un botón
- RuntimeException en el análisis de Gson JSON: Error al invocar java.lang.ClassLoader protegido () sin args