140 lines
4.0 KiB
Java
140 lines
4.0 KiB
Java
package com.youth.banner;
|
|
|
|
import android.os.Handler;
|
|
import android.os.Message;
|
|
import java.lang.ref.WeakReference;
|
|
import java.util.concurrent.locks.Lock;
|
|
import java.util.concurrent.locks.ReentrantLock;
|
|
|
|
/* loaded from: classes2.dex */
|
|
public class WeakHandler {
|
|
private Lock b = new ReentrantLock();
|
|
final ChainedRef c = new ChainedRef(this.b, null);
|
|
private final ExecHandler a = new ExecHandler();
|
|
|
|
private static class ExecHandler extends Handler {
|
|
private final WeakReference<Handler.Callback> a = null;
|
|
|
|
ExecHandler() {
|
|
}
|
|
|
|
@Override // android.os.Handler
|
|
public void handleMessage(Message message) {
|
|
Handler.Callback callback;
|
|
WeakReference<Handler.Callback> weakReference = this.a;
|
|
if (weakReference == null || (callback = weakReference.get()) == null) {
|
|
return;
|
|
}
|
|
callback.handleMessage(message);
|
|
}
|
|
}
|
|
|
|
static class WeakRunnable implements Runnable {
|
|
private final WeakReference<Runnable> a;
|
|
private final WeakReference<ChainedRef> b;
|
|
|
|
WeakRunnable(WeakReference<Runnable> weakReference, WeakReference<ChainedRef> weakReference2) {
|
|
this.a = weakReference;
|
|
this.b = weakReference2;
|
|
}
|
|
|
|
@Override // java.lang.Runnable
|
|
public void run() {
|
|
Runnable runnable = this.a.get();
|
|
ChainedRef chainedRef = this.b.get();
|
|
if (chainedRef != null) {
|
|
chainedRef.a();
|
|
}
|
|
if (runnable != null) {
|
|
runnable.run();
|
|
}
|
|
}
|
|
}
|
|
|
|
private WeakRunnable c(Runnable runnable) {
|
|
if (runnable == null) {
|
|
throw new NullPointerException("Runnable can't be null");
|
|
}
|
|
ChainedRef chainedRef = new ChainedRef(this.b, runnable);
|
|
this.c.a(chainedRef);
|
|
return chainedRef.d;
|
|
}
|
|
|
|
public final boolean a(Runnable runnable) {
|
|
return this.a.post(c(runnable));
|
|
}
|
|
|
|
public final void b(Runnable runnable) {
|
|
WeakRunnable a = this.c.a(runnable);
|
|
if (a != null) {
|
|
this.a.removeCallbacks(a);
|
|
}
|
|
}
|
|
|
|
public final boolean a(Runnable runnable, long j) {
|
|
return this.a.postDelayed(c(runnable), j);
|
|
}
|
|
|
|
static class ChainedRef {
|
|
ChainedRef a;
|
|
ChainedRef b;
|
|
final Runnable c;
|
|
final WeakRunnable d;
|
|
Lock e;
|
|
|
|
public ChainedRef(Lock lock, Runnable runnable) {
|
|
this.c = runnable;
|
|
this.e = lock;
|
|
this.d = new WeakRunnable(new WeakReference(runnable), new WeakReference(this));
|
|
}
|
|
|
|
public WeakRunnable a() {
|
|
this.e.lock();
|
|
try {
|
|
if (this.b != null) {
|
|
this.b.a = this.a;
|
|
}
|
|
if (this.a != null) {
|
|
this.a.b = this.b;
|
|
}
|
|
this.b = null;
|
|
this.a = null;
|
|
this.e.unlock();
|
|
return this.d;
|
|
} catch (Throwable th) {
|
|
this.e.unlock();
|
|
throw th;
|
|
}
|
|
}
|
|
|
|
public void a(ChainedRef chainedRef) {
|
|
this.e.lock();
|
|
try {
|
|
if (this.a != null) {
|
|
this.a.b = chainedRef;
|
|
}
|
|
chainedRef.a = this.a;
|
|
this.a = chainedRef;
|
|
chainedRef.b = this;
|
|
} finally {
|
|
this.e.unlock();
|
|
}
|
|
}
|
|
|
|
public WeakRunnable a(Runnable runnable) {
|
|
this.e.lock();
|
|
try {
|
|
for (ChainedRef chainedRef = this.a; chainedRef != null; chainedRef = chainedRef.a) {
|
|
if (chainedRef.c == runnable) {
|
|
return chainedRef.a();
|
|
}
|
|
}
|
|
this.e.unlock();
|
|
return null;
|
|
} finally {
|
|
this.e.unlock();
|
|
}
|
|
}
|
|
}
|
|
}
|