0
請求根據https://developer.android.com/training/volley/requestqueue.html#singleton 它是不鼓勵使用通過設置在Application.onCreate()的請求隊列Android的凌空Singleton模式如何添加/刪除基於標籤
的實施提供一個單獨的類的老辦法然而,下面看到的「新」更模塊化的方式不包含向請求添加標籤並使用這些標籤取消標籤的方法。
public class MySingleton {
private static MySingleton mInstance;
private RequestQueue mRequestQueue;
private ImageLoader mImageLoader;
private static Context mCtx;
private MySingleton(Context context) {
mCtx = context;
mRequestQueue = getRequestQueue();
mImageLoader = new ImageLoader(mRequestQueue,
new ImageLoader.ImageCache() {
private final LruCache<String, Bitmap>
cache = new LruCache<String, Bitmap>(20);
@Override
public Bitmap getBitmap(String url) {
return cache.get(url);
}
@Override
public void putBitmap(String url, Bitmap bitmap) {
cache.put(url, bitmap);
}
});
}
public static synchronized MySingleton getInstance(Context context) {
if (mInstance == null) {
mInstance = new MySingleton(context);
}
return mInstance;
}
public RequestQueue getRequestQueue() {
if (mRequestQueue == null) {
// getApplicationContext() is key, it keeps you from leaking the
// Activity or BroadcastReceiver if someone passes one in.
mRequestQueue = Volley.newRequestQueue(mCtx.getApplicationContext());
}
return mRequestQueue;
}
public <T> void addToRequestQueue(Request<T> req) {
getRequestQueue().add(req);
}
public ImageLoader getImageLoader() {
return mImageLoader;
}
}
如何去增加((在Application.onCreate))類似於從舊的方式下面的那些方法:
public <T> void addToRequestQueue(Request<T> req, String tag) {
// set the default tag if tag is empty
req.setTag(TextUtils.isEmpty(tag) ? TAG : tag);
getRequestQueue().add(req);
}
public <T> void addToRequestQueue(Request<T> req) {
req.setTag(TAG);
getRequestQueue().add(req);
}
public void cancelPendingRequests(Object tag) {
if (mRequestQueue != null) {
mRequestQueue.cancelAll(tag);
}
}
沒有關於特定的標記刪除所有請求的例子,沒有甚至大約如果你想添加更多的移除請求 –
任何實例便捷方法到MySingleton類,只需查看示例代碼中已存在的addToRequestQueue(...)方法。您所要做的就是編寫便捷方法,並對MySingleton擁有的RequestQueue對象執行任何操作。 – Turnsole
@Turnsole你好,我有內存泄漏與齊射匿名類特別是回調監聽功能,然後我讀了關於「cancelALL」。我究竟在哪裏放置了「MySingleton.getRequestQueue()。cancelAll(tag);」它是否在「MySingleton.getInstance(this).addToRequestQueue(request)」之後的活動中;「 ? – Woppi