Index: src/org/adblockplus/android/api/JniExceptionHandler.java |
=================================================================== |
new file mode 100644 |
--- /dev/null |
+++ b/src/org/adblockplus/android/api/JniExceptionHandler.java |
@@ -0,0 +1,52 @@ |
+package org.adblockplus.android.api; |
+ |
+import java.util.concurrent.LinkedBlockingQueue; |
+ |
+public final class JniExceptionHandler |
+{ |
+ private static LogWorker logWorker = null; |
+ |
+ static |
+ { |
+ logWorker = new LogWorker(); |
+ final Thread t = new Thread(logWorker); |
+ t.setDaemon(true); |
+ t.start(); |
+ } |
+ |
+ public static void logException(final Throwable t) |
+ { |
+ logWorker.logException(t); |
+ } |
+ |
+ private final static class LogWorker implements Runnable |
+ { |
+ LinkedBlockingQueue<Throwable> exceptionQueue = new LinkedBlockingQueue<Throwable>(); |
+ |
+ private void logException(final Throwable t) |
+ { |
+ this.exceptionQueue.offer(t); |
+ } |
+ |
+ @Override |
+ public void run() |
+ { |
+ for (;;) |
+ { |
+ try |
+ { |
+ final Throwable t = this.exceptionQueue.take(); |
+ System.err.println("EXCEPTION: " + t); |
+ } |
+ catch (final InterruptedException ie) |
+ { |
+ break; |
+ } |
+ catch (final Throwable ex) |
+ { |
+ // TODO: Swallow or log? |
+ } |
+ } |
+ } |
+ } |
+} |