滑动图像加载超时增加

Posted

技术标签:

【中文标题】滑动图像加载超时增加【英文标题】:glide image loading timeout increase 【发布时间】:2016-07-20 06:15:58 【问题描述】:

我正在使用 glide 从 URL 加载图像。 当我获取图像时,我在图像视图中显示了一个加载器。 某些正在获取的图像较大,因此在缓慢的互联网连接中会发生超时并引发异常

如何增加超时时间?

【问题讨论】:

您是否尝试过使用 OK HTTP 而不是 volley?就像这里解释的那样:github.com/bumptech/glide/wiki/Integration-Libraries#okhttp 【参考方案1】:

找了很多终于有了答案,如果你是用volley的话:

public class CustomGlide implements GlideModule 
    @Override
    public void applyOptions(Context context, GlideBuilder builder) 
    

    @Override
    public void registerComponents(Context context, Glide glide) 
        RequestQueue queue = new RequestQueue( // params hardcoded from Volley.newRequestQueue()
                new DiskBasedCache(new File(context.getCacheDir(), "volley")),
                new BasicNetwork(new HurlStack())) 
            @Override public <T> Request<T> add(Request<T> request) 
                request.setRetryPolicy(new DefaultRetryPolicy(10000, 1, 1));
                return super.add(request);
            
        ;
        queue.start();
        glide.register(GlideUrl.class, InputStream.class, new VolleyUrlLoader.Factory(queue));
    

根据需要更改DefaultRetryPolicy

在清单中:

 <meta-data
            android:name="<package-name>.CustomGlide"
            android:value="GlideModule" />

【讨论】:

我已经像你说的那样声明了 customGlide 类,但是现在如何在 java 类的滑动加载图像行中使用它? 现在滑行配置了你提供的超时时间。只需使用 Glide.with(context).load(url).into(ImageView) 请求图像 对于 VolleyUrlLoader,您需要添加: compile 'com.github.bumptech.glide:volley-integration:1.5.0@aar' 到您的依赖项。 为了避免 conflict 和 VolleyGlideModule 在您使用 Gradle 时自动添加到合并清单中,您必须通过添加另一个元数据条目来手动排除它:&lt;meta-data android:name="com.bumptech.glide.integration.volley.VolleyGlideModule" tools:node="remove" /&gt; @knezmilos 在 VolleyUrlLoader 上编译时显示未解决的超类型错误【参考方案2】:

下面是解决方案:Glide 4.3.1 & OkHttp 3.9.1,与以前有点不同(不再是OkHttpGlideModule,而是AppGlideModule)。

build.gradle

implementation 'com.squareup.okhttp3:okhttp:3.9.1'
implementation 'com.github.bumptech.glide:glide:4.3.1'
annotationProcessor 'com.github.bumptech.glide:compiler:4.3.1'
implementation 'com.github.bumptech.glide:okhttp3-integration:4.3.1'

CustomGlideModule

@GlideModule
public class CustomGlideModule extends AppGlideModule 

    @Override
    public void registerComponents(Context context, Glide glide, Registry registry) 
        final OkHttpClient.Builder builder = new OkHttpClient.Builder();
        builder.readTimeout(YOUR_CUSTOM_TIMEOUT, TimeUnit.SECONDS);
        builder.writeTimeout(YOUR_CUSTOM_TIMEOUT, TimeUnit.SECONDS);
        builder.connectTimeout(YOUR_CUSTOM_TIMEOUT, TimeUnit.SECONDS);
        registry.append(GlideUrl.class, InputStream.class, new OkHttpUrlLoader.Factory(builder.build()));
    


【讨论】:

【参考方案3】:

如果要使用OkHttp,请根据this导入glide:okhttp-integration,然后实现自己的OkHttpGlideModule

@GlideModule
public class CustomGlideModule extends OkHttpGlideModule 
    @Override
    public void applyOptions(Context context, GlideBuilder builder) 
        // stub
    

    @Override
    public void registerComponents(Context context, Glide glide) 
        final OkHttpClient.Builder builder = new OkHttpClient.Builder();

        // set your timeout here
        builder.readTimeout(30, TimeUnit.SECONDS);
        builder.writeTimeout(30, TimeUnit.SECONDS);
        builder.connectTimeout(30, TimeUnit.SECONDS);

        glide.register(GlideUrl.class, InputStream.class, new OkHttpUrlLoader.Factory(builder.build()));
    

【讨论】:

【参考方案4】:

新版glide可以使用这个方法

.timeout(60000)

最终的代码示例将是:

Glide.with(imageView.getContext())
        .load(finalUrl)
        .timeout(60000)
        .placeholder(R.drawable.place_holder)
        .into(imageView);

【讨论】:

【参考方案5】:
.timeout(30000)

最短的方法:

Glide.with(this)
         .setDefaultRequestOptions(new RequestOptions()
         .timeout(30000))
         .load("https://***.com/posts/58063088/edit")
         .placeholder(getResources().getDrawable(R.drawable.no_image))
         .error(getResources().getDrawable(R.drawable.no_image))                
         .into(imageView);

【讨论】:

以上是关于滑动图像加载超时增加的主要内容,如果未能解决你的问题,请参考以下文章

增加每页级别的 ASP.Net 超时

后备图像和超时 - 外部内容。 Javascript

无法在 useEffect 挂钩中测试超时功能

在屏幕阅读器上工作的空闲超时警告模式

BigQueryExecuteQueryOperator 超时问题(如何增加超时)

弹性beantalk部署时间超过超时时间,我如何增加超时时间