java - precio - loop station rc1
java.lang.RuntimeException: solo se puede crear un Looper por subproceso (2)
java.lang.RuntimeException: solo se puede crear un Looper por subproceso
La excepción se produce porque usted (o el código principal de Android) ya ha llamado a Looper.prepare()
para el subproceso de ejecución actual.
Lo siguiente comprueba si ya existe un Looper para el subproceso actual, si no, crea uno, evitando así la RuntimeException
.
public void run()
{
if (Looper.myLooper() == null)
{
Looper.prepare();
}
thisHandler = new Handler();
....
}
Tengo un hilo simple que va así:
public class AwesomeRunnable extends Thread {
Handler thisHandler = null;
Handler uihandler = null;
String update = null;
long time = 0;
public AwesomeRunnable(Handler h, long howLong) {
uihandler = h;
time = howLong;
}
public void run() {
Looper.prepare();
thisHandler = new Handler();
...
EDITAR: CÓDIGO AÑADIDO QUE COMIENZA LO FUNCIONABLE
public class StartCycle implements Runnable {
@Override
public void run() {
pomodoroLeft = numPomodoro;
while(pomodoroLeft > 0) {
pomodoroLeft--;
actualSeconds = 6 * ONE_SECOND;
runnable = new AwesomeRunnable(myHandler, actualSeconds);
runnable.start();
waitForClock();
Es una clase interna de una actividad principal. Este hilo , sin embargo, no se ejecuta en la actividad principal , sino dentro de otro hilo que se ejecuta en la actividad principal .
De todos modos, este ejemplo es exactamente el mismo que here , pero por alguna razón me da java.lang.RuntimeException: solo se puede crear un Looper por subproceso.
No creé ningún otro bucle, al menos explícitamente en cualquier lugar.
En lugar de simplemente llamar a Looper.prepare();
, primero verifique si Looper
no existe para su Thread
, si no es así, llame a esa función. Me gusta esto:
if (Looper.myLooper()==null)
Looper.prepare();