From bfcb04c19681f117df06151cdc4f3f3343f83676 Mon Sep 17 00:00:00 2001 From: Eric Anderson Date: Mon, 11 Jul 2016 10:02:23 -0700 Subject: [PATCH] core: Allow avoiding Provider loading, for Android --- .../grpc/internal/AbstractManagedChannelImplBuilder.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/io/grpc/internal/AbstractManagedChannelImplBuilder.java b/core/src/main/java/io/grpc/internal/AbstractManagedChannelImplBuilder.java index 9f18adfb6d..c514553389 100644 --- a/core/src/main/java/io/grpc/internal/AbstractManagedChannelImplBuilder.java +++ b/core/src/main/java/io/grpc/internal/AbstractManagedChannelImplBuilder.java @@ -241,11 +241,18 @@ public abstract class AbstractManagedChannelImplBuilder transportFactory = new AuthorityOverridingTransportFactory( transportFactory, authorityOverride); } + NameResolver.Factory nameResolverFactory = this.nameResolverFactory; + if (nameResolverFactory == null) { + // Avoid loading the provider unless necessary, as a way to workaround a possibly-costly + // and poorly optimized getResource() call on Android. If any other piece of code calls + // getResource(), then this shouldn't be a problem unless called on the UI thread. + nameResolverFactory = NameResolverProvider.asFactory(); + } return new ManagedChannelImpl( target, // TODO(carl-mastrangelo): Allow clients to pass this in new ExponentialBackoffPolicy.Provider(), - firstNonNull(nameResolverFactory, NameResolverProvider.asFactory()), + nameResolverFactory, getNameResolverParams(), firstNonNull(loadBalancerFactory, DummyLoadBalancerFactory.getInstance()), transportFactory,