以菊花链方式连接Android Loaders是一个坏主意吗?

时间:2012-08-02 22:57:59

标签: android android-progressbar android-loadermanager android-loader

我需要在线获取2个来源的数据,并希望在我这样做时显示每个数据的进度。收集数据后,我可以填充列表视图。

我当前的实现是MyActivity实现了LoaderCallbacks,而LoaderCallbacks又创建了一个MyDataLoader实例(一个扩展AsyncTaskLoader的类)。在MyDataLoader的loadInBackground方法中,它从所有源获取数据并填充Sqlite数据库。然后可以在整个过程中使用此数据库。

问题在于我没有向用户提供有关我们在过程中的位置的任何反馈。

所以我想用菊花链式加载器使用getLoaderManager()。initLoader来创建我的加载器,然后一次遍历loadermanager中的加载器。当每个加载器完成并返回onLoadFinished时,我有机会设置progressDialog的文本以指示进度。

这是个坏主意吗?有更简单更好的方法吗?

1 个答案:

答案 0 :(得分:2)

这是不可能的,因为Loader在后​​台加载数据在不同的线程上...数据没有“按顺序”加载,因此显示onLoadFinished的进度不会给你准确的图片实际取得了多大进展。

用户需要知道的是,数据是在后台加载的。即使启动整个对话框也有点矫枉过正,并且在我看来会破坏用户体验。我最喜欢的两个选择是:

  1. 在布局或操作栏中显示不确定的进度图标。

  2. 在布局的中心显示一个显示为TextView的灰色Loading...。当从Web检索数据并准备好在屏幕上显示时,TextView最终被隐藏。一些Google制作的应用选择此选项,例如Google Analytics。