大家想必,做应用市场,或者其他下载,都想在任何地方都监听进度,并且很好的实现。
在这里分享一个比较简单,并且防止内存溢出等情况。我们使用的弱引用来进行绑定View进行更新进度方法。
Map<String, WeakReference<View>> viewListem = new HashMap<String, WeakReference<View>>();// 对进度条进行弱引用
防止内存不够的时候进行回收。
key为下载地址
value 进度条
//添加进度条引用。
public synchronized void addViewToCache(String path, View view) {
if (viewListem == null) {
return;
}
WeakReference<View> softView = new WeakReference<View>(view);
viewListem.put(path, softView);
}
//获取进度条。
public synchronized View getViewByPath(String path) {
if (viewListem == null) {
return null;
}
// 从缓存中取软引用的View对象
WeakReference<View> softView = viewListem.get(path);
// 判断是否存在软引用
if (softView == null) {
return null;
}
// 取出View对象,如果由于内存不足View被回收,将取得空
View view= softView.get();
return view;
}
接下来就是,就到进度监听的回调接口去,获取到对应的View进行更新进度吧。搞定。
是不是既简单又实现方便。又防止内存溢出。