gpt4 book ai didi

android - Volley 中的单例类有什么用

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:53:27 25 4
gpt4 key购买 nike

我使用 Volley 库在 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

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);

}
}

在这里,我编写了一个代码,用于在不使用 Singleton 类的情况下下载图像。请同时检查此代码。
在这里记住一件事,在没有使用 Singleton 类的情况下,我也没有任何错误地完成了我的工作。

--------------------代码 With Out Singleton class ---------- --------------

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

最佳答案

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

一个关键概念是 RequestQueue 必须使用应用程序上下文而不是 Activity 上下文进行实例化。这确保 RequestQueue 将在您的应用程序的整个生命周期内持续存在,而不是在每次重新创建 Activity 时都重新创建(例如,当用户旋转设备时)。

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

关于android - Volley 中的单例类有什么用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41120064/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com