Android 为什么截击会在我的应用程序上使用这么多线程?

Android 为什么截击会在我的应用程序上使用这么多线程?,android,android-volley,Android,Android Volley,我一直在浏览我正在开发的一个应用程序的线程转储,其中使用了Volley。我已经查看了一半的线程,到目前为止,我发现了40个截取线程,大部分是NetworkDispatcher,但也有一些CacheDispatcher。我们在一项活动中使用截击。在OnCreate中: volleyQueue = Volley.newRequestQueue(this); 然后呢, ImageRequest s3ImageRequest = new ImageRequest( decryptedI

我一直在浏览我正在开发的一个应用程序的线程转储,其中使用了Volley。我已经查看了一半的线程,到目前为止,我发现了40个截取线程,大部分是NetworkDispatcher,但也有一些CacheDispatcher。我们在一项活动中使用截击。在OnCreate中:

volleyQueue = Volley.newRequestQueue(this);
然后呢,

ImageRequest s3ImageRequest = new ImageRequest(
        decryptedImageURL.toString(),
        new Response.Listener<Bitmap>() {
            @Override
            public void onResponse(Bitmap bitmap) {
                imageBitmap = bitmap;
                loadingImage = false;
            }
        },
        0, // max width
        0, // max height
        null, // decode configuration
        new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError volleyError) {
                Rlog.e(TAG, "Riff Playback: could not load image through Volley: " + decryptedImageURL);
                volleyError.printStackTrace();
                abortPlayback();
            }
        }
);
s3ImageRequest.setTag(TAG);
volleyQueue.add(s3ImageRequest);
ImageRequest s3ImageRequest=新建ImageRequest(
decryptedImageURL.toString(),
新的Response.Listener(){
@凌驾
公共void onResponse(位图){
图像位图=位图;
loadingImage=false;
}
},
0,//最大宽度
0,//最大高度
null,//解码配置
新的Response.ErrorListener(){
@凌驾
公共错误响应(截击错误截击错误){
e(标签,“Riff回放:无法通过截击加载图像:”+decryptedImageURL);
截击错误。printStackTrace();
abortPlayback();
}
}
);
s3ImageRequest.setTag(TAG);
添加(s3ImageRequest);

是什么导致了后台线程如此惊人的激增?

Volley背后的一个主要设计决策是同时执行许多图像加载(或者实际上是任何小型http请求)。Volley的工作原理是创建许多专用于加载图像的线程,以便您可以同时执行这些网络调用

有趣的是,截击实际上被称为截击,因为它是以一组同时落在地面上的箭命名的。试着把网络请求想象成箭头,这样可能会更清楚一些


你可以在这段很棒的谷歌I/O视频中了解更多,该视频的特点是Volley的创建者Ficus Kirkpatrick谈论他的发明。

我不会真的称之为“背景线程的惊人扩散”。。。在你发布的屏幕截图中,所有线程都阻塞了
Object 35; wait()
,因此它们可能只是线程池或其他东西的一部分……只是澄清一下,因此,拥有40多个后台线程是正常的?因为我一直在阅读,似乎有一小部分人建议保持一个全局应用程序范围的截击队列。这种优化会有帮助吗?