是否可以查明LoaderManager是否已完成加载所有AsyncTaskLoaders?

发布于 2024-12-27 11:16:18 字数 494 浏览 1 评论 0原文

我问的原因是因为我想在主 Activity 启动的任何 AsyncTask 正在运行时在 ActionBar 中显示 ProgressDialog throbber。

我当前的解决方案(半工作)扩展了 AsyncTaskLoader。在该类中,我重写了 onForceLoad() 方法,并将加载器的 Id 和类名添加到在我的应用程序中管理的 Map(以加载器 Id 为键);当加载器添加到地图时,我会在操作栏中显示加载颤动器。每当调用 LoaderCallback 的 onLoadFinished 时,我都会使用 Id 从 Map 中删除 Loader 并检查 Map 是否为空。如果地图为空,我将停止显示 laoding throbber。

我面临的问题是,例如,如果有 5 个 Loader 正在运行,并且用户单击刷新以再次重新启动所有 5 个 Loader,则并非所有 Loader 的 onLoadFinished 都会被调用。这会导致加载脉冲无限期地显示,因为地图永远不会变空。我认为这可能与加载程序的节流方式有关,但我不确定。

The reason I ask is because I want to display a ProgressDialog throbber in the ActionBar while any AsyncTask started by my main Activity is running.

My current solution (that semi-works) extends the AsyncTaskLoader. In that class I override the onForceLoad() method and add the loader's Id and class name to a Map (keyed on the Loader Id) that is managed in my Application; when a Loader is added to the Map I show the loading throbber in the ActionBar. Whenever a LoaderCallback's onLoadFinished is called I remove the Loader from the Map using the Id and check whether or not the Map is empty. If the Map is empty I stop displaying the laoding throbber.

The problem that I am facing is that if, for instance, 5 Loaders are running and the user clicks refresh which restarts all 5 Loaders again, not all Loader's onLoadFinished will be called. Which results in the loading throbber getting displayed indefinitely because the Map never becomes empty. I think this may have something to do with the way Loaders are throttled but I am not sure.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文