什么是单打类在Volley中的用法

sre*_*u24 7 singleton android android-studio android-volley

使用Singleton类在volley库的帮助下下载图像.如果我按时使用单例类已成功将图像输入到我的ImageView中,并且使用Singleton类也可以将图像下载到ImageView中.
你能告诉我我的代码带来的好处吗?

Singleton类代码

MainActivity.java

public class MainActivity extends AppCompatActivity {
    Button response_click;
    TextView text_response;
    RequestQueue requestQueue;
    String server_url="http://i.imgur.com/7spzG.png";
    ImageView imageView;
    ImageRequest imageRequest;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        response_click=(Button) findViewById(R.id.click_response);
        text_response=(TextView) findViewById(R.id.text_response);
        imageView=(ImageView) findViewById(R.id.image_download);
    }//onCreate Ending
    public void response_click(View view){
   
        final ImageRequest imageRequest=new ImageRequest(server_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) {
                Toast.makeText(getApplicationContext(),"You Got an Error....",Toast.LENGTH_LONG).show();

            }
        });
MySingleTon.getInstance(MainActivity.this).addToRequestQue(imageRequest);

    }//Button Click Ending
}//Main Activity Ending
Run Code Online (Sandbox Code Playgroud)

MySingleTon.java

public class MySingleTon {
    private static MySingleTon mySingleTon;
    private RequestQueue requestQueue;
    private static Context mctx;
    private MySingleTon(Context context){
        this.mctx=context;
        this.requestQueue=getRequestQueue();

    }
    public RequestQueue getRequestQueue(){
        if (requestQueue==null){
            requestQueue= Volley.newRequestQueue(mctx.getApplicationContext());
        }
        return requestQueue;
    }
   public static synchronized MySingleTon getInstance(Context context){
       if (mySingleTon==null){
           mySingleTon=new MySingleTon(context);
       }
       return mySingleTon;
   }
    public<T> void addToRequestQue(Request<T> request){
        requestQueue.add(request);

    }
}
Run Code Online (Sandbox Code Playgroud)

这里正在编写一个代码,用于下载图像而不使用Singleton类请检查此代码.请记住这一点.使用Singleton类也完成了我的工作,没有任何错误.

代码With Out SingleTon

MainActivity.java

public class MainActivity extends AppCompatActivity {
    Button response_click;
    TextView text_response;
    RequestQueue requestQueue;
    String server_url="http://i.imgur.com/7spzG.png";
    ImageView imageView;
    ImageRequest imageRequest;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        response_click=(Button) findViewById(R.id.click_response);
        text_response=(TextView) findViewById(R.id.text_response);
        imageView=(ImageView) findViewById(R.id.image_download);
    }//onCreate Ending
    public void response_click(View view){
        requestQueue=Volley.newRequestQueue(this.getApplicationContext());
        final ImageRequest imageRequest=new ImageRequest(server_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) {
                Toast.makeText(getApplicationContext(),"You Got an Error....",Toast.LENGTH_LONG).show();

            }
        });

        requestQueue.add(imageRequest);
        
    }//Button Click Ending
}//Main Activity Ending
Run Code Online (Sandbox Code Playgroud)

Bab*_*iwa 7

如果您的应用程序不断使用网络,则设置单个RequestQueue实例(这将持续应用程序的生命周期)可能是最有效的。您可以通过多种方式实现这一目标。推荐的方法是实现一个封装RequestQueue和其他Volley功能的单例类。另一种方法是将Application子类化,并在Application.onCreate()中设置RequestQueue。但是不鼓励这种方法。静态单例可以以更模块化的方式提供相同的功能。

一个关键概念是必须使用Application上下文而不是Activity上下文实例化RequestQueue。这样可以确保RequestQueue在应用程序的整个生命周期中持续有效,而不是在每次重新创建活动时(例如,当用户旋转设备时)都重新创建。

阅读文档https://developer.android.com/training/volley/requestqueue.html#singleton