public class android.app.QueuedWork
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: android.app.QueuedWork
  super_class: java.lang.Object
{
  private static final java.lang.String LOG_TAG;
    descriptor: Ljava/lang/String;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  private static final boolean DEBUG;
    descriptor: Z
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 0

  private static final long DELAY;
    descriptor: J
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 100

  private static final long MAX_WAIT_TIME_MILLIS;
    descriptor: J
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 512

  private static final java.lang.Object sLock;
    descriptor: Ljava/lang/Object;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  private static java.lang.Object sProcessingWork;
    descriptor: Ljava/lang/Object;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC

  private static final java.util.LinkedList<java.lang.Runnable> sFinishers;
    descriptor: Ljava/util/LinkedList;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    Signature: Ljava/util/LinkedList<Ljava/lang/Runnable;>;
    RuntimeInvisibleAnnotations: 
      com.android.internal.annotations.GuardedBy(value = "sLock")

  private static android.os.Handler sHandler;
    descriptor: Landroid/os/Handler;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    RuntimeInvisibleAnnotations: 
      com.android.internal.annotations.GuardedBy(value = "sLock")

  private static final java.util.LinkedList<java.lang.Runnable> sWork;
    descriptor: Ljava/util/LinkedList;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    Signature: Ljava/util/LinkedList<Ljava/lang/Runnable;>;
    RuntimeInvisibleAnnotations: 
      com.android.internal.annotations.GuardedBy(value = "sLock")

  private static boolean sCanDelay;
    descriptor: Z
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    RuntimeInvisibleAnnotations: 
      com.android.internal.annotations.GuardedBy(value = "sLock")

  private static final com.android.internal.util.ExponentiallyBucketedHistogram mWaitTimes;
    descriptor: Lcom/android/internal/util/ExponentiallyBucketedHistogram;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    RuntimeInvisibleAnnotations: 
      com.android.internal.annotations.GuardedBy(value = "sLock")

  private static int mNumWaits;
    descriptor: I
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=3, locals=0, args_size=0
         0: .line 50
            ldc Landroid/app/QueuedWork;
            invokevirtual java.lang.Class.getSimpleName:()Ljava/lang/String;
            putstatic android.app.QueuedWork.LOG_TAG:Ljava/lang/String;
         1: .line 60
            new java.lang.Object
            dup
            invokespecial java.lang.Object.<init>:()V
            putstatic android.app.QueuedWork.sLock:Ljava/lang/Object;
         2: .line 69
            new java.lang.Object
            dup
            invokespecial java.lang.Object.<init>:()V
            putstatic android.app.QueuedWork.sProcessingWork:Ljava/lang/Object;
         3: .line 73
            new java.util.LinkedList
            dup
            invokespecial java.util.LinkedList.<init>:()V
            putstatic android.app.QueuedWork.sFinishers:Ljava/util/LinkedList;
         4: .line 77
            aconst_null
            putstatic android.app.QueuedWork.sHandler:Landroid/os/Handler;
         5: .line 81
            new java.util.LinkedList
            dup
            invokespecial java.util.LinkedList.<init>:()V
            putstatic android.app.QueuedWork.sWork:Ljava/util/LinkedList;
         6: .line 85
            iconst_1
            putstatic android.app.QueuedWork.sCanDelay:Z
         7: .line 90
            new com.android.internal.util.ExponentiallyBucketedHistogram
            dup
         8: .line 91
            bipush 16
         9: .line 90
            invokespecial com.android.internal.util.ExponentiallyBucketedHistogram.<init>:(I)V
            putstatic android.app.QueuedWork.mWaitTimes:Lcom/android/internal/util/ExponentiallyBucketedHistogram;
        10: .line 92
            iconst_0
            putstatic android.app.QueuedWork.mNumWaits:I
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  public void <init>();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // android.app.QueuedWork this
         0: .line 49
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
            return
        end local 0 // android.app.QueuedWork this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Landroid/app/QueuedWork;

  private static android.os.Handler getHandler();
    descriptor: ()Landroid/os/Handler;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=4, locals=2, args_size=0
         0: .line 100
            getstatic android.app.QueuedWork.sLock:Ljava/lang/Object;
            dup
            astore 0
            monitorenter
         1: .line 101
            getstatic android.app.QueuedWork.sHandler:Landroid/os/Handler;
            ifnonnull 7
         2: .line 102
            new android.os.HandlerThread
            dup
            ldc "queued-work-looper"
         3: .line 103
            bipush -2
         4: .line 102
            invokespecial android.os.HandlerThread.<init>:(Ljava/lang/String;I)V
            astore 1 /* handlerThread */
        start local 1 // android.os.HandlerThread handlerThread
         5: .line 104
            aload 1 /* handlerThread */
            invokevirtual android.os.HandlerThread.start:()V
         6: .line 106
            new android.app.QueuedWork$QueuedWorkHandler
            dup
            aload 1 /* handlerThread */
            invokevirtual android.os.HandlerThread.getLooper:()Landroid/os/Looper;
            invokespecial android.app.QueuedWork$QueuedWorkHandler.<init>:(Landroid/os/Looper;)V
            putstatic android.app.QueuedWork.sHandler:Landroid/os/Handler;
        end local 1 // android.os.HandlerThread handlerThread
         7: .line 108
      StackMap locals: java.lang.Object
      StackMap stack:
            getstatic android.app.QueuedWork.sHandler:Landroid/os/Handler;
            aload 0
            monitorexit
         8: areturn
         9: .line 100
      StackMap locals:
      StackMap stack: java.lang.Throwable
            aload 0
            monitorexit
        10: athrow
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            5    7     1  handlerThread  Landroid/os/HandlerThread;
      Exception table:
        from    to  target  type
           1     8       9  any
           9    10       9  any

  public static void addFinisher(java.lang.Runnable);
    descriptor: (Ljava/lang/Runnable;)V
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=2, locals=2, args_size=1
        start local 0 // java.lang.Runnable finisher
         0: .line 125
            getstatic android.app.QueuedWork.sLock:Ljava/lang/Object;
            dup
            astore 1
            monitorenter
         1: .line 126
            getstatic android.app.QueuedWork.sFinishers:Ljava/util/LinkedList;
            aload 0 /* finisher */
            invokevirtual java.util.LinkedList.add:(Ljava/lang/Object;)Z
            pop
         2: .line 125
            aload 1
            monitorexit
         3: goto 6
      StackMap locals: java.lang.Runnable java.lang.Object
      StackMap stack: java.lang.Throwable
         4: aload 1
            monitorexit
         5: athrow
         6: .line 128
      StackMap locals:
      StackMap stack:
            return
        end local 0 // java.lang.Runnable finisher
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    7     0  finisher  Ljava/lang/Runnable;
      Exception table:
        from    to  target  type
           1     3       4  any
           4     5       4  any
    MethodParameters:
          Name  Flags
      finisher  

  public static void removeFinisher(java.lang.Runnable);
    descriptor: (Ljava/lang/Runnable;)V
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=2, locals=2, args_size=1
        start local 0 // java.lang.Runnable finisher
         0: .line 136
            getstatic android.app.QueuedWork.sLock:Ljava/lang/Object;
            dup
            astore 1
            monitorenter
         1: .line 137
            getstatic android.app.QueuedWork.sFinishers:Ljava/util/LinkedList;
            aload 0 /* finisher */
            invokevirtual java.util.LinkedList.remove:(Ljava/lang/Object;)Z
            pop
         2: .line 136
            aload 1
            monitorexit
         3: goto 6
      StackMap locals: java.lang.Runnable java.lang.Object
      StackMap stack: java.lang.Throwable
         4: aload 1
            monitorexit
         5: athrow
         6: .line 139
      StackMap locals:
      StackMap stack:
            return
        end local 0 // java.lang.Runnable finisher
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    7     0  finisher  Ljava/lang/Runnable;
      Exception table:
        from    to  target  type
           1     3       4  any
           4     5       4  any
    MethodParameters:
          Name  Flags
      finisher  

  public static void waitToFinish();
    descriptor: ()V
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=4, locals=8, args_size=0
         0: .line 150
            invokestatic java.lang.System.currentTimeMillis:()J
            lstore 0 /* startTime */
        start local 0 // long startTime
         1: .line 151
            iconst_0
            istore 2 /* hadMessages */
        start local 2 // boolean hadMessages
         2: .line 153
            invokestatic android.app.QueuedWork.getHandler:()Landroid/os/Handler;
            astore 3 /* handler */
        start local 3 // android.os.Handler handler
         3: .line 155
            getstatic android.app.QueuedWork.sLock:Ljava/lang/Object;
            dup
            astore 4
            monitorenter
         4: .line 156
            aload 3 /* handler */
            iconst_1
            invokevirtual android.os.Handler.hasMessages:(I)Z
            ifeq 6
         5: .line 158
            aload 3 /* handler */
            iconst_1
            invokevirtual android.os.Handler.removeMessages:(I)V
         6: .line 167
      StackMap locals: long int android.os.Handler java.lang.Object
      StackMap stack:
            iconst_0
            putstatic android.app.QueuedWork.sCanDelay:Z
         7: .line 155
            aload 4
            monitorexit
         8: goto 11
      StackMap locals:
      StackMap stack: java.lang.Throwable
         9: aload 4
            monitorexit
        10: athrow
        11: .line 170
      StackMap locals:
      StackMap stack:
            invokestatic android.os.StrictMode.allowThreadDiskWrites:()Landroid/os/StrictMode$ThreadPolicy;
            astore 4 /* oldPolicy */
        start local 4 // android.os.StrictMode$ThreadPolicy oldPolicy
        12: .line 172
            invokestatic android.app.QueuedWork.processPendingWork:()V
        13: .line 173
            goto 17
      StackMap locals: long int android.os.Handler android.os.StrictMode$ThreadPolicy
      StackMap stack: java.lang.Throwable
        14: astore 5
        15: .line 174
            aload 4 /* oldPolicy */
            invokestatic android.os.StrictMode.setThreadPolicy:(Landroid/os/StrictMode$ThreadPolicy;)V
        16: .line 175
            aload 5
            athrow
        17: .line 174
      StackMap locals:
      StackMap stack:
            aload 4 /* oldPolicy */
            invokestatic android.os.StrictMode.setThreadPolicy:(Landroid/os/StrictMode$ThreadPolicy;)V
        18: .line 181
      StackMap locals:
      StackMap stack:
            getstatic android.app.QueuedWork.sLock:Ljava/lang/Object;
            dup
            astore 6
            monitorenter
        19: .line 182
            getstatic android.app.QueuedWork.sFinishers:Ljava/util/LinkedList;
            invokevirtual java.util.LinkedList.poll:()Ljava/lang/Object;
            checkcast java.lang.Runnable
            astore 5 /* finisher */
        start local 5 // java.lang.Runnable finisher
        20: .line 181
            aload 6
            monitorexit
        21: goto 24
        end local 5 // java.lang.Runnable finisher
      StackMap locals: long int android.os.Handler android.os.StrictMode$ThreadPolicy top java.lang.Object
      StackMap stack: java.lang.Throwable
        22: aload 6
            monitorexit
        23: athrow
        start local 5 // java.lang.Runnable finisher
        24: .line 185
      StackMap locals: long int android.os.Handler android.os.StrictMode$ThreadPolicy java.lang.Runnable
      StackMap stack:
            aload 5 /* finisher */
            ifnonnull 26
        25: .line 186
            goto 31
        26: .line 189
      StackMap locals:
      StackMap stack:
            aload 5 /* finisher */
            invokeinterface java.lang.Runnable.run:()V
        end local 5 // java.lang.Runnable finisher
        27: .line 178
            goto 18
        28: .line 191
      StackMap locals: long int android.os.Handler android.os.StrictMode$ThreadPolicy
      StackMap stack: java.lang.Throwable
            astore 7
        29: .line 192
            iconst_1
            putstatic android.app.QueuedWork.sCanDelay:Z
        30: .line 193
            aload 7
            athrow
        31: .line 192
      StackMap locals:
      StackMap stack:
            iconst_1
            putstatic android.app.QueuedWork.sCanDelay:Z
        32: .line 195
            getstatic android.app.QueuedWork.sLock:Ljava/lang/Object;
            dup
            astore 5
            monitorenter
        33: .line 196
            invokestatic java.lang.System.currentTimeMillis:()J
            lload 0 /* startTime */
            lsub
            lstore 6 /* waitTime */
        start local 6 // long waitTime
        34: .line 198
            lload 6 /* waitTime */
            lconst_0
            lcmp
            ifgt 35
            iload 2 /* hadMessages */
            ifeq 39
        35: .line 199
      StackMap locals: java.lang.Object long
      StackMap stack:
            getstatic android.app.QueuedWork.mWaitTimes:Lcom/android/internal/util/ExponentiallyBucketedHistogram;
            lload 6 /* waitTime */
            invokestatic java.lang.Long.valueOf:(J)Ljava/lang/Long;
            invokevirtual java.lang.Long.intValue:()I
            invokevirtual com.android.internal.util.ExponentiallyBucketedHistogram.add:(I)V
        36: .line 200
            getstatic android.app.QueuedWork.mNumWaits:I
            iconst_1
            iadd
            putstatic android.app.QueuedWork.mNumWaits:I
        37: .line 202
            getstatic android.app.QueuedWork.mNumWaits:I
            sipush 1024
            irem
            ifeq 38
            lload 6 /* waitTime */
            ldc 512
            lcmp
            ifle 39
        38: .line 203
      StackMap locals:
      StackMap stack:
            getstatic android.app.QueuedWork.mWaitTimes:Lcom/android/internal/util/ExponentiallyBucketedHistogram;
            getstatic android.app.QueuedWork.LOG_TAG:Ljava/lang/String;
            ldc "waited: "
            invokevirtual com.android.internal.util.ExponentiallyBucketedHistogram.log:(Ljava/lang/String;Ljava/lang/CharSequence;)V
        end local 6 // long waitTime
        39: .line 195
      StackMap locals:
      StackMap stack:
            aload 5
            monitorexit
        40: goto 43
      StackMap locals:
      StackMap stack: java.lang.Throwable
        41: aload 5
            monitorexit
        42: athrow
        43: .line 207
      StackMap locals:
      StackMap stack:
            return
        end local 4 // android.os.StrictMode$ThreadPolicy oldPolicy
        end local 3 // android.os.Handler handler
        end local 2 // boolean hadMessages
        end local 0 // long startTime
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            1   44     0    startTime  J
            2   44     2  hadMessages  Z
            3   44     3      handler  Landroid/os/Handler;
           12   44     4    oldPolicy  Landroid/os/StrictMode$ThreadPolicy;
           20   22     5     finisher  Ljava/lang/Runnable;
           24   27     5     finisher  Ljava/lang/Runnable;
           34   39     6     waitTime  J
      Exception table:
        from    to  target  type
           4     8       9  any
           9    10       9  any
          12    14      14  any
          19    21      22  any
          22    23      22  any
          18    28      28  any
          33    40      41  any
          41    42      41  any

  public static void queue(java.lang.Runnable, boolean);
    descriptor: (Ljava/lang/Runnable;Z)V
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=4, locals=4, args_size=2
        start local 0 // java.lang.Runnable work
        start local 1 // boolean shouldDelay
         0: .line 216
            invokestatic android.app.QueuedWork.getHandler:()Landroid/os/Handler;
            astore 2 /* handler */
        start local 2 // android.os.Handler handler
         1: .line 218
            getstatic android.app.QueuedWork.sLock:Ljava/lang/Object;
            dup
            astore 3
            monitorenter
         2: .line 219
            getstatic android.app.QueuedWork.sWork:Ljava/util/LinkedList;
            aload 0 /* work */
            invokevirtual java.util.LinkedList.add:(Ljava/lang/Object;)Z
            pop
         3: .line 221
            iload 1 /* shouldDelay */
            ifeq 6
            getstatic android.app.QueuedWork.sCanDelay:Z
            ifeq 6
         4: .line 222
            aload 2 /* handler */
            iconst_1
            ldc 100
            invokevirtual android.os.Handler.sendEmptyMessageDelayed:(IJ)Z
            pop
         5: .line 223
            goto 7
         6: .line 224
      StackMap locals: android.os.Handler java.lang.Object
      StackMap stack:
            aload 2 /* handler */
            iconst_1
            invokevirtual android.os.Handler.sendEmptyMessage:(I)Z
            pop
         7: .line 218
      StackMap locals:
      StackMap stack:
            aload 3
            monitorexit
         8: goto 11
      StackMap locals:
      StackMap stack: java.lang.Throwable
         9: aload 3
            monitorexit
        10: athrow
        11: .line 227
      StackMap locals:
      StackMap stack:
            return
        end local 2 // android.os.Handler handler
        end local 1 // boolean shouldDelay
        end local 0 // java.lang.Runnable work
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0   12     0         work  Ljava/lang/Runnable;
            0   12     1  shouldDelay  Z
            1   12     2      handler  Landroid/os/Handler;
      Exception table:
        from    to  target  type
           2     8       9  any
           9    10       9  any
    MethodParameters:
             Name  Flags
      work         
      shouldDelay  

  public static boolean hasPendingWork();
    descriptor: ()Z
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=2, locals=1, args_size=0
         0: .line 233
            getstatic android.app.QueuedWork.sLock:Ljava/lang/Object;
            dup
            astore 0
            monitorenter
         1: .line 234
            getstatic android.app.QueuedWork.sWork:Ljava/util/LinkedList;
            invokevirtual java.util.LinkedList.isEmpty:()Z
            ifeq 2
            iconst_0
            goto 3
      StackMap locals: java.lang.Object
      StackMap stack:
         2: iconst_1
      StackMap locals:
      StackMap stack: int
         3: aload 0
            monitorexit
         4: ireturn
         5: .line 233
      StackMap locals:
      StackMap stack: java.lang.Throwable
            aload 0
            monitorexit
         6: athrow
      LocalVariableTable:
        Start  End  Slot  Name  Signature
      Exception table:
        from    to  target  type
           1     4       5  any
           5     6       5  any

  private static void processPendingWork();
    descriptor: ()V
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=2, locals=6, args_size=0
         0: .line 239
            lconst_0
            lstore 0 /* startTime */
        start local 0 // long startTime
         1: .line 245
            getstatic android.app.QueuedWork.sProcessingWork:Ljava/lang/Object;
            dup
            astore 2
            monitorenter
         2: .line 248
            getstatic android.app.QueuedWork.sLock:Ljava/lang/Object;
            dup
            astore 4
            monitorenter
         3: .line 249
            getstatic android.app.QueuedWork.sWork:Ljava/util/LinkedList;
            invokevirtual java.util.LinkedList.clone:()Ljava/lang/Object;
            checkcast java.util.LinkedList
            astore 3 /* work */
        start local 3 // java.util.LinkedList work
         4: .line 250
            getstatic android.app.QueuedWork.sWork:Ljava/util/LinkedList;
            invokevirtual java.util.LinkedList.clear:()V
         5: .line 253
            invokestatic android.app.QueuedWork.getHandler:()Landroid/os/Handler;
            iconst_1
            invokevirtual android.os.Handler.removeMessages:(I)V
         6: .line 248
            aload 4
            monitorexit
         7: goto 10
        end local 3 // java.util.LinkedList work
      StackMap locals: long java.lang.Object top java.lang.Object
      StackMap stack: java.lang.Throwable
         8: aload 4
            monitorexit
         9: athrow
        start local 3 // java.util.LinkedList work
        10: .line 256
      StackMap locals: long java.lang.Object java.util.LinkedList
      StackMap stack:
            aload 3 /* work */
            invokevirtual java.util.LinkedList.size:()I
            ifle 15
        11: .line 257
            aload 3 /* work */
            invokevirtual java.util.LinkedList.iterator:()Ljava/util/Iterator;
            astore 5
            goto 14
      StackMap locals: long java.lang.Object java.util.LinkedList top java.util.Iterator
      StackMap stack:
        12: aload 5
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast java.lang.Runnable
            astore 4 /* w */
        start local 4 // java.lang.Runnable w
        13: .line 258
            aload 4 /* w */
            invokeinterface java.lang.Runnable.run:()V
        end local 4 // java.lang.Runnable w
        14: .line 257
      StackMap locals:
      StackMap stack:
            aload 5
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 12
        end local 3 // java.util.LinkedList work
        15: .line 245
      StackMap locals: long java.lang.Object
      StackMap stack:
            aload 2
            monitorexit
        16: goto 19
      StackMap locals:
      StackMap stack: java.lang.Throwable
        17: aload 2
            monitorexit
        18: athrow
        19: .line 267
      StackMap locals:
      StackMap stack:
            return
        end local 0 // long startTime
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            1   20     0  startTime  J
            4    8     3       work  Ljava/util/LinkedList<Ljava/lang/Runnable;>;
           10   15     3       work  Ljava/util/LinkedList<Ljava/lang/Runnable;>;
           13   14     4          w  Ljava/lang/Runnable;
      Exception table:
        from    to  target  type
           3     7       8  any
           8     9       8  any
           2    16      17  any
          17    18      17  any
}
SourceFile: "QueuedWork.java"
NestMembers:
  android.app.QueuedWork$QueuedWorkHandler
InnerClasses:
  private QueuedWorkHandler = android.app.QueuedWork$QueuedWorkHandler of android.app.QueuedWork
  public final ThreadPolicy = android.os.StrictMode$ThreadPolicy of android.os.StrictMode