未验证 提交 ef6cdd8f 编写于 作者: J JessYan 提交者: GitHub

Merge pull request #247 from passin95/master

添加一个公用的线程池
......@@ -18,7 +18,6 @@ package com.jess.arms.di.component;
import android.app.Activity;
import android.app.Application;
import android.content.Context;
import com.google.gson.Gson;
import com.jess.arms.base.delegate.AppDelegate;
import com.jess.arms.di.module.AppModule;
......@@ -31,13 +30,11 @@ import com.jess.arms.integration.ConfigModule;
import com.jess.arms.integration.IRepositoryManager;
import com.jess.arms.integration.cache.Cache;
import com.jess.arms.utils.ArmsUtils;
import java.io.File;
import javax.inject.Singleton;
import dagger.BindsInstance;
import dagger.Component;
import java.io.File;
import java.util.concurrent.ExecutorService;
import javax.inject.Singleton;
import me.jessyan.rxerrorhandler.core.RxErrorHandler;
import okhttp3.OkHttpClient;
......@@ -129,6 +126,14 @@ public interface AppComponent {
*/
Cache.Factory cacheFactory();
/**
* 返回一个全局公用的线程池,适用于大多数异步需求。
* 避免多个线程池创建带来的资源消耗。
*
* @return {@link ExecutorService}
*/
ExecutorService executorService();
void inject(AppDelegate delegate);
@Component.Builder
......
......@@ -18,27 +18,25 @@ package com.jess.arms.di.module;
import android.app.Application;
import android.content.Context;
import android.support.annotation.Nullable;
import com.google.gson.Gson;
import com.jess.arms.http.GlobalHttpHandler;
import com.jess.arms.http.log.RequestInterceptor;
import com.jess.arms.utils.DataHelper;
import dagger.Binds;
import dagger.Module;
import dagger.Provides;
import io.rx_cache2.internal.RxCache;
import io.victoralbertos.jolyglot.GsonSpeaker;
import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.TimeUnit;
import javax.inject.Named;
import javax.inject.Singleton;
import dagger.Binds;
import dagger.Module;
import dagger.Provides;
import io.rx_cache2.internal.RxCache;
import io.victoralbertos.jolyglot.GsonSpeaker;
import me.jessyan.rxerrorhandler.core.RxErrorHandler;
import me.jessyan.rxerrorhandler.handler.listener.ResponseErrorListener;
import okhttp3.Dispatcher;
import okhttp3.HttpUrl;
import okhttp3.Interceptor;
import okhttp3.OkHttpClient;
......@@ -102,7 +100,7 @@ public abstract class ClientModule {
@Singleton
@Provides
static OkHttpClient provideClient(Application application, @Nullable OkhttpConfiguration configuration, OkHttpClient.Builder builder, Interceptor intercept
, @Nullable List<Interceptor> interceptors, @Nullable GlobalHttpHandler handler) {
, @Nullable List<Interceptor> interceptors, @Nullable GlobalHttpHandler handler, ExecutorService executorService) {
builder
.connectTimeout(TIME_OUT, TimeUnit.SECONDS)
.readTimeout(TIME_OUT, TimeUnit.SECONDS)
......@@ -122,6 +120,9 @@ public abstract class ClientModule {
}
}
// 为 OkHttp 设置默认的线程池。
builder.dispatcher(new Dispatcher(executorService));
if (configuration != null)
configuration.configOkhttp(application, builder);
return builder.build();
......
......@@ -19,32 +19,34 @@ import android.app.Application;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.text.TextUtils;
import com.bumptech.glide.Glide;
import com.jess.arms.http.BaseUrl;
import com.jess.arms.http.GlobalHttpHandler;
import com.jess.arms.http.imageloader.BaseImageLoaderStrategy;
import com.jess.arms.http.log.DefaultFormatPrinter;
import com.jess.arms.http.log.FormatPrinter;
import com.jess.arms.http.log.RequestInterceptor;
import com.jess.arms.http.imageloader.BaseImageLoaderStrategy;
import com.jess.arms.integration.cache.Cache;
import com.jess.arms.integration.cache.CacheType;
import com.jess.arms.integration.cache.IntelligentCache;
import com.jess.arms.integration.cache.LruCache;
import com.jess.arms.utils.DataHelper;
import com.jess.arms.utils.Preconditions;
import dagger.Module;
import dagger.Provides;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Executor;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.SynchronousQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import javax.inject.Singleton;
import dagger.Module;
import dagger.Provides;
import me.jessyan.rxerrorhandler.handler.listener.ResponseErrorListener;
import okhttp3.HttpUrl;
import okhttp3.Interceptor;
import okhttp3.internal.Util;
/**
* ================================================
......@@ -72,6 +74,7 @@ public class GlobalConfigModule {
private RequestInterceptor.Level mPrintHttpLogLevel;
private FormatPrinter mFormatPrinter;
private Cache.Factory mCacheFactory;
private ExecutorService mExecutorService;
private GlobalConfigModule(Builder builder) {
this.mApiUrl = builder.apiUrl;
......@@ -88,6 +91,7 @@ public class GlobalConfigModule {
this.mPrintHttpLogLevel = builder.printHttpLogLevel;
this.mFormatPrinter = builder.formatPrinter;
this.mCacheFactory = builder.cacheFactory;
this.mExecutorService = builder.executorService;
}
public static Builder builder() {
......@@ -232,6 +236,19 @@ public class GlobalConfigModule {
} : mCacheFactory;
}
/**
* 返回一个全局公用的线程池,适用于大多数异步需求。
* 避免多个线程池创建带来的资源消耗。
*
* @return {@link Executor}
*/
@Singleton
@Provides
ExecutorService provideExecutorService() {
return mExecutorService == null ? new ThreadPoolExecutor(0, Integer.MAX_VALUE, 60, TimeUnit.SECONDS,
new SynchronousQueue<Runnable>(), Util.threadFactory("Arms Executor", false)) : mExecutorService;
}
public static final class Builder {
private HttpUrl apiUrl;
......@@ -248,6 +265,7 @@ public class GlobalConfigModule {
private RequestInterceptor.Level printHttpLogLevel;
private FormatPrinter formatPrinter;
private Cache.Factory cacheFactory;
private ExecutorService executorService;
private Builder() {
}
......@@ -329,6 +347,11 @@ public class GlobalConfigModule {
return this;
}
public Builder executorService(ExecutorService executorService) {
this.executorService = executorService;
return this;
}
public GlobalConfigModule build() {
return new GlobalConfigModule(this);
}
......
......@@ -114,7 +114,8 @@ public final class GlobalConfiguration implements ConfigModule {
// Timber.i("printFileResponse:" + responseUrl);
// }
// })
// 可以自定义一个单例的线程池供全局使用。
// .executorService(Executors.newCachedThreadPool())
// 这里提供一个全局处理 Http 请求和响应结果的处理类,可以比客户端提前一步拿到服务器返回的结果,可以做一些操作,比如token超时,重新获取
.globalHttpHandler(new GlobalHttpHandlerImpl(context))
// 用来处理 rxjava 中发生的所有错误,rxjava 中发生的每个错误都会回调此接口
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册