大傢想必,做應用市場,或者其他下載,都想在任何地方都監聽進度,並且很好的實現。
在這裡分享一個比較簡單,並且防止內存溢出等情況。我們使用的弱引用來進行綁定View進行更新進度方法。
Map<String, WeakReference> viewListem = new HashMap<String, WeakReference>();// 對進度條進行弱引用
防止內存不夠的時候進行回收。
key為下載地址
value 進度條
//添加進度條引用。
public synchronized void addViewToCache(String path, View view) {
if (viewListem == null) {
return;
}
WeakReference softView = new WeakReference(view);
viewListem.put(path, softView);
}
//獲取進度條。
public synchronized View getViewByPath(String path) {
if (viewListem == null) {
return null;
}
// 從緩存中取軟引用的View對象
WeakReference softView = viewListem.get(path);
// 判斷是否存在軟引用
if (softView == null) {
return null;
}
// 取出View對象,如果由於內存不足View被回收,將取得空
View view= softView.get();
return view;
}
接下來就是,就到進度監聽的回調接口去,獲取到對應的View進行更新進度吧。搞定。
是不是既簡單又實現方便。又防止內存溢出。