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 EndingRun 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 EndingRun Code Online (Sandbox Code Playgroud)
如果您的应用程序不断使用网络,则设置单个RequestQueue实例(这将持续应用程序的生命周期)可能是最有效的。您可以通过多种方式实现这一目标。推荐的方法是实现一个封装RequestQueue和其他Volley功能的单例类。另一种方法是将Application子类化,并在Application.onCreate()中设置RequestQueue。但是不鼓励这种方法。静态单例可以以更模块化的方式提供相同的功能。
一个关键概念是必须使用Application上下文而不是Activity上下文实例化RequestQueue。这样可以确保RequestQueue在应用程序的整个生命周期中持续有效,而不是在每次重新创建活动时(例如,当用户旋转设备时)都重新创建。
阅读文档https://developer.android.com/training/volley/requestqueue.html#singleton
| 归档时间: |
|
| 查看次数: |
8892 次 |
| 最近记录: |