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.

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.

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" 

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 .

  • Quiero obtener tiempo de la red GSM
  • La mejor manera de determinar la aplicación actual (en ejecución) actual (utilizando un servicio?)
  • ¿Cómo se calcula el tiempo del rezo musulmán en una aplicación androide?
  • Medir el tiempo transcurrido entre dos MotionEvents en Android
  • Sincronizar la hora del sistema en 2 teléfonos
  • Android: cambia el formato de hora según el formato de hora actual del dispositivo
  • Comprobación si CountDownTimer se está ejecutando
  • que muestran la hora actual en TimePicker en android
  • Problema de Android para averiguar la última corrección GPS reciente
  • Cómo sincronizar correctamente el código RenderScript de Android en Nvidia Shield
  • SetMinDate (...) para DatePicker no funciona cuando se invoca una segunda vez
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.