Guest User

Untitled

a guest
Oct 6th, 2018
212
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.36 KB | None | 0 0
  1. **WorkerHandler Class** ==> Class for holding a background handler.
  2.  
  3.  
  4. class WorkerHandler {
  5. private final static ConcurrentHashMap<String, WeakReference<WorkerHandler>> sCache = new ConcurrentHashMap<>(4);
  6.  
  7. public static WorkerHandler get(String name) {
  8. if (sCache.containsKey(name)) {
  9. WorkerHandler cached = sCache.get(name).get();
  10. if (cached != null) {
  11. HandlerThread thread = cached.mThread;
  12. if (thread.isAlive() && !thread.isInterrupted()) {
  13. Log.w("get:", "Reusing cached worker handler."+ name);
  14. return cached;
  15. }
  16. }
  17. Log.w("get:", "Thread reference died, removing."+ name);
  18. sCache.remove(name);
  19. }
  20.  
  21. Log.i("get:", "Creating new handler."+ name);
  22. WorkerHandler handler = new WorkerHandler(name);
  23. sCache.put(name, new WeakReference<>(handler));
  24. return handler;
  25. }
  26.  
  27. // Handy util to perform action in a fallback thread.
  28. // Not to be used for long-running operations since they will
  29. // block the fallback thread.
  30. public static void run(Runnable action) {
  31. get("FallbackCameraThread").post(action);
  32. }
  33.  
  34. private HandlerThread mThread;
  35. private Handler mHandler;
  36.  
  37. private WorkerHandler(String name) {
  38. mThread = new HandlerThread(name);
  39. mThread.setDaemon(true);
  40. mThread.start();
  41. mHandler = new Handler(mThread.getLooper());
  42. }
  43.  
  44. public Handler get() {
  45. return mHandler;
  46. }
  47.  
  48. public void post(Runnable runnable) {
  49. mHandler.post(runnable);
  50. }
  51.  
  52. public Thread getThread() {
  53. return mThread;
  54. }
  55.  
  56. public static void destroy() {
  57. for (String key : sCache.keySet()) {
  58. WeakReference<WorkerHandler> ref = sCache.get(key);
  59. WorkerHandler handler = ref.get();
  60. if (handler != null && handler.getThread().isAlive()) {
  61. handler.getThread().interrupt();
  62. }
  63. ref.clear();
  64. }
  65. sCache.clear();
  66. }
  67. }
Add Comment
Please, Sign In to add comment