当我可以在add方法中将ImageRequest对象键入到Request中时,Singleton类在使用Volley下载



当使用Volley查找加载图像时,文档中建议使用singleton类。但我可以在传递add((方法中的argumennt时,将ImageRequest键入Request。它也可以同样工作。那么使用Singleton类而不是使用这个有什么用呢。这是代码,

package com.example.myvolleyimage;
import androidx.appcompat.app.AppCompatActivity;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.ImageRequest;
import com.android.volley.toolbox.Volley;
public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final String url = "https://images.pexels.com/photos/3862601/pexels-photo-3862601.jpeg?auto=compress&cs=tinysrgb&dpr=3&h=750&w=1260";
Button button = (Button) findViewById(R.id.button);
final ImageView imageView = (ImageView) findViewById(R.id.imageView);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
RequestQueue requestQueue = Volley.newRequestQueue(MainActivity.this);
ImageRequest imageRequest = new ImageRequest(url,
new Response.Listener<Bitmap>() {
@Override
public void onResponse(Bitmap response) {
imageView.setImageBitmap(response);
}
},0, 0,null,
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.i("Error","error IS " +error);
}
});
requestQueue.add((Request)imageRequest);
}
});

}
}

从技术上讲,你可以,但你并没有真正对图像进行排队,让Volley来处理这些请求。在不同的场景中,使用单个队列具有优势。例如:

  • 如果你正在加载一个带有图像的项目列表,一个队列允许volution处理优先级,并为最近请求的图像提供优先级,限制你一次下载的图像数量,等等。

  • 每个队列实例化创建线程的其他类。如果同时有多个队列,则可能会使用超出所需的内存,可能会创建超出所需数量的线程,从而导致每个映像的线程切换。

没有什么可以阻止您使用Volley,但建议保留一个实例,这样向其中添加请求会更快、更节省资源

相关内容

最新更新