如何解决试图了解 Firebase Android Crashlytics Sdk 源代码
我正在研究 Firebase Crashlytics Android SDK 源代码。我想学习如何更好地处理 File 和 multiThreading 的写入。 在研究期间,我发现了这个实用程序类:
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//
package com.google.firebase.crashlytics.internal.common;
import com.google.firebase.crashlytics.internal.Logger;
import java.util.Locale;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicLong;
public final class ExecutorUtils {
private static final long DEFAULT_TERMINATION_TIMEOUT = 2L;
private ExecutorUtils() {
}
public static ExecutorService buildSingleThreadExecutorService(String name) {
ThreadFactory threadFactory = getNamedThreadFactory(name);
ExecutorService executor = Executors.newSingleThreadExecutor(threadFactory);
addDelayedShutdownHook(name,executor);
return executor;
}
public static ScheduledExecutorService buildSingleThreadScheduledExecutorService(String name) {
ThreadFactory threadFactory = getNamedThreadFactory(name);
ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor(threadFactory);
addDelayedShutdownHook(name,executor);
return executor;
}
public static final ThreadFactory getNamedThreadFactory(final String threadNameTemplate) {
final AtomicLong count = new AtomicLong(1L);
return new ThreadFactory() {
public Thread newThread(final Runnable runnable) {
Thread thread = Executors.defaultThreadFactory().newThread(new BackgroundPriorityRunnable() {
public void onRun() {
runnable.run();
}
});
thread.setName(threadNameTemplate + count.getAndIncrement());
return thread;
}
};
}
private static final void addDelayedShutdownHook(String serviceName,ExecutorService service) {
addDelayedShutdownHook(serviceName,service,2L,TimeUnit.SECONDS);
}
public static final void addDelayedShutdownHook(final String serviceName,final ExecutorService service,final long terminationTimeout,final TimeUnit timeUnit) {
Runtime.getRuntime().addShutdownHook(new Thread(new BackgroundPriorityRunnable() {
public void onRun() {
try {
Logger.getLogger().d("Executing shutdown hook for " + serviceName);
service.shutdown();
if (!service.awaitTermination(terminationTimeout,timeUnit)) {
Logger.getLogger().d(serviceName + " did not shut down in the allocated time. Requesting immediate shutdown.");
service.shutdownNow();
}
} catch (InterruptedException var2) {
Logger.getLogger().d(String.format(Locale.US,"Interrupted while waiting for %s to shut down. Requesting immediate shutdown.",serviceName));
service.shutdownNow();
}
}
},"Crashlytics Shutdown Hook for " + serviceName));
}
}
和这个 Runnable 实现:
package com.google.firebase.crashlytics.internal.common;
import android.os.Process;
public abstract class BackgroundPriorityRunnable implements Runnable {
public BackgroundPriorityRunnable() {
}
public final void run() {
Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND);
this.onRun();
}
protected abstract void onRun();
}
我不明白 BackgroundPriorityRunnable。方法Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND);
是什么意思?如果他们没有将线程优先级设置为 Thread_priority_background 会发生什么?
另一个我不明白的函数是 addDelayedShutdownHook。它有什么作用 ?为什么要使用它?
我不知道 stackOverflow 是不是正确的地方,但我不知道在哪里可以帮助我理解这段代码:)
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com(将#修改为@)