我有一系列要上传的文件,这些文件存储为内容提供者中的条目。每个条目还包含已上传百分比。
一个活动显示上传列表,每个文件都是一个带有进度条的项目,用于显示上传进度。
我通过ContentObserver更新进度条。在CursorAdaptor中,我为每个条目定义了ContentObserver,并将其保存为相应视图的标签。
现在我的问题是我不知道何时取消注册这样的ContentObservers。唯一找到的方法是在包含活动的onDestroy()
中取消注册:
for (int i = 0; i < mListView.getChildCount(); i++) {
final View v = mListView.getChildAt(i);
final ContentObserver obs = (ContentObserver) v.getTag();
if (obs != null) {
getContentResolver().unregisterContentObserver(obs);
}
}
这真的非常糟糕。它在Adapter和父Activity之间引入了依赖关系。另一方面,未注销的ContentObservers可能会防止Activity被销毁,从而引入内存泄漏。
您看有更好的方法吗?
onPause()
(因此,在onResume()
上注册),因为您不能总是预测onDestroy()
将何时被调用或系统是否会在不调用它的情况下杀死您的应用程序。 - ozbeknotifyDataSetInvalidated()
。 - S.D.