Retardo de tiempo en Android
Así que estoy tratando de crear un "efecto estroboscópico" de luz en mi aplicación.
Para hacer esto necesito un retardo de tiempo, uno de 100ms el otro de 20.
- Cómo llegar el tiempo en la ubicación actual
- Detener temporizador sin destruir y volver a crear - Android
- Hora mostrada en Logcat
- Android: obtenga tiempo hasta que Runnable se ejecute a través de Handler
- Tiempo del GPS en Android
Aquí está el código que estoy usando.
Thread timer = new Thread(); long longTime = 100; long shortTime = 20; for (int x = 0; x < 2000000; x++) { layout.setBackgroundColor(background); try { timer.sleep(longTime); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } layout.setBackgroundColor(backgroundBlack); try { timer.sleep(shortTime); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
El problema que tengo es que cuando hago clic en el botón para llamar a ese código, no pasa nada. Así que he hecho un poco de depuración y estoy bastante seguro de que es la llamada de tiempo. Nunca he programado en Java antes así que soy inseguro cómo llamar un sueño del hilo de rosca.
- JodaTime - Compruebe si LocalTime es después de ahora y ahora antes de otro LocalTime
- ¿Cómo puedo agregar un nuevo botón en el widget del selector de fechas en android?
- Tiempo del temporizador de cuenta regresiva androide
- ¿Cómo puedo obtener la fecha y la hora del proveedor de la red?
- Cómo administrar la expiración de prueba sin conexión para una aplicación de Android?
- El tiempo de conexión expiro
- Tiempo de generación de DH Keypair en Android
- Tiempo de sincronización para la grabación de datos en varios dispositivos Android
Puede utilizar un controlador como se indica a continuación para lograrlo.
public class Strobe extends Activity { private LinearLayout mLinearLayout; private Handler mHander = new Handler(); private boolean mActive = false; private boolean mSwap = true; private final Runnable mRunnable = new Runnable() { public void run() { if (mActive) { if (mSwap) { mLinearLayout.setBackgroundColor(Color.WHITE); mSwap = false; mHander.postDelayed(mRunnable, 20); } else { mLinearLayout.setBackgroundColor(Color.BLACK); mSwap = true; mHander.postDelayed(mRunnable, 100); } } } }; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mLinearLayout = (LinearLayout) findViewById(R.id.strobe); startStrobe(); } private void startStrobe() { mActive = true; mHander.post(mRunnable); } }
Establezca un tema en la actividad para que se muestre en pantalla completa.
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
Creo que este artículo le beneficiaría. http://oreilly.com/catalog/expjava/excerpt/index.html específicamente esta http://oreilly.com/catalog/expjava/excerpt/index.html#EXJ-CH-6-FIG-1
El problema es que no se está ejecutando en el hilo. Para ejecutar código en el subproceso debe anular su método run (). De acuerdo con su código actual, lo siguiente puede capturar lo que desea hacer.
Thread timer = new Thread(){ public void run(){ long longTime = 100; long shortTime = 20; for (int x = 0; x < 2000000; x++) { layout.setBackgroundColor(background); try { Thread.sleep(longTime); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } layout.setBackgroundColor(backgroundBlack); try { Thread.sleep(shortTime); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } timer.start();
Sin embargo, los hilos no juegan tan bien con el sistema operativo Android. Para su aplicación, puede ser mejor utilizar los servicios de Android. Consulte http://developer.android.com/guide/topics/fundamentals/services.html .
- Desplazamiento en Android con WebView
- ¿Cuál es la diferencia entre onPresentScreen y onLeaveApplication?