gecko/mobile/android/base/util/GeckoBackgroundThread.java
Kartikaya Gupta 6346303910 Bug 851060 - Move util files into the util/ folder. r=cpeterson
--HG--
rename : mobile/android/base/ActivityResultHandler.java => mobile/android/base/util/ActivityResultHandler.java
rename : mobile/android/base/ActivityResultHandlerMap.java => mobile/android/base/util/ActivityResultHandlerMap.java
rename : mobile/android/base/GeckoBackgroundThread.java => mobile/android/base/util/GeckoBackgroundThread.java
rename : mobile/android/base/GeckoEventListener.java => mobile/android/base/util/GeckoEventListener.java
rename : mobile/android/base/GeckoEventResponder.java => mobile/android/base/util/GeckoEventResponder.java
rename : mobile/android/base/GeckoJarReader.java => mobile/android/base/util/GeckoJarReader.java
rename : mobile/android/base/INIParser.java => mobile/android/base/util/INIParser.java
rename : mobile/android/base/INISection.java => mobile/android/base/util/INISection.java
rename : mobile/android/base/UiAsyncTask.java => mobile/android/base/util/UiAsyncTask.java
2013-03-15 11:40:03 +01:00

55 lines
1.6 KiB
Java

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/. */
package org.mozilla.gecko.util;
import android.os.Handler;
import android.os.Looper;
import java.util.concurrent.SynchronousQueue;
public final class GeckoBackgroundThread extends Thread {
private static final String LOOPER_NAME = "GeckoBackgroundThread";
// Guarded by 'this'.
private static Handler sHandler = null;
private SynchronousQueue<Handler> mHandlerQueue = new SynchronousQueue<Handler>();
// Singleton, so private constructor.
private GeckoBackgroundThread() {
super();
}
@Override
public void run() {
setName(LOOPER_NAME);
Looper.prepare();
try {
mHandlerQueue.put(new Handler());
} catch (InterruptedException ie) {}
Looper.loop();
}
// Get a Handler for a looper thread, or create one if it doesn't yet exist.
public static synchronized Handler getHandler() {
if (sHandler == null) {
GeckoBackgroundThread lt = new GeckoBackgroundThread();
lt.start();
try {
sHandler = lt.mHandlerQueue.take();
} catch (InterruptedException ie) {}
}
return sHandler;
}
public static void post(Runnable runnable) {
Handler handler = getHandler();
if (handler == null) {
throw new IllegalStateException("No handler! Must have been interrupted. Not posting.");
}
handler.post(runnable);
}
}