位于包 :
androidx.arch.core.executor
++++TaskExecutor
++++ArchTaskExecutor
++++DefaultTaskExecutor
复习 Jetpack
时发现了 androidx.arch.core.executor
包中有一个线程池实现类 ArchTaskExecutor
,内部实现了切换到主线程的功能。
使用的方式十分顺滑:
//切换到主线程
ArchTaskExecutor.getInstance().executeOnMainThread(new Runnable{
});
//子线程执行
ArchTaskExecutor.getInstance().executeOnDiskIO(new Runnable{
});
先看 ArchTaskExecutor
暴露的方法:
- executeOnDiskIO(Runnable runnable)
- postToMainThread(Runnable runnable)
- Executor getMainThreadExecutor()
- Executor getIOThreadExecutor()
- boolean isMainThread()
- void setDelegate(TaskExecutor taskExecutor)
分析具体的方法之前看下 ArchTaskExecutor
类的构造方式:
ArchTaskExecutor 继承自抽象类 TaskExecutor ,TaskExecutor 很简单,只有4个方法,其中可以看到方法executeOnMainThread(Runnable runnable) 中的逻辑是如果任务不是在主线程上,那么将调用 postToMainThread(runnable) 将任务切换至主线程中执行。
public abstract class TaskExecutor {
public abstract void executeOnDiskIO(@NonNull Runnable runnable);
public abstract void postToMainThread(@NonNull Runnable runnable);
public void executeOnMainThread(@NonNull Runnable runnable) {
if (isMainThread()) {
runnable.run();
} else {
postToMainThread(runnable);
}
}
public abstract boolean isMainThread();
}
接着看 Arc