I have a simple thread that goes like this:
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();
...
EDIT: ADDED CODE THAT STARTS THE RUNNABLE
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();
It is an inner class of a main activity. This thread, however runs not on the main activity, but inside of another thread that runs on the main activity.
Anyway, this example is exactly the same as here, but for some reason it gives me java.lang.RuntimeException: Only one Looper may be created per thread.
I did not create any other loopers, at least explicitly anywhere.
java.lang.RuntimeException: Only one Looper may be created per thread
The exception is thrown because you (or core Android code) has already called Looper.prepare()
for the current executing thread.
The following checks whether a Looper already exists for the current thread, if not, it creates one, thereby avoiding the RuntimeException
.
public void run()
{
if (Looper.myLooper() == null)
{
Looper.prepare();
}
thisHandler = new Handler();
....
}
Instead of just calling Looper.prepare();
, first check if Looper
does not already exist for your Thread
, if not, call that function. Like this:
if (Looper.myLooper()==null)
Looper.prepare();
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With