在后台加载图像、视频

Posted

技术标签:

【中文标题】在后台加载图像、视频【英文标题】:Loading Images,Videos in background 【发布时间】:2018-12-18 01:25:19 【问题描述】:

我正在尝试制作一个将显示一些图像和视频的应用程序。所以我打算添加一个大约 2 秒的启动画面。 2 秒后,用户将被带到应用程序的主屏幕。

我想在用户处于初始屏幕时开始加载图像、视频,以便用户在主屏幕时等待的时间最少。

因此加载将在启动画面开始,然后在两秒钟后用户将被带到主屏幕,而不管加载是否完成。 现在由于这涉及两个活动,我应该使用异步任务还是应该使用带有异步任务的服务(用于代码完成的回调)?

哪个更好。 在 Android 8.0 中,使用服务有什么限制吗?

我认为如果编码不正确,在两个屏幕之间使用异步任务可能会导致内存泄漏。

任何帮助将不胜感激。

编辑:我的应用程序还有一项功能,因此不能让用户在启动画面中等待,直到加载结束。

【问题讨论】:

【参考方案1】:

使用 AsyncTask 在 2 个 Activity 之间共享结果不是很好,因为在 Splash Activity 中创建的 AsyncTack 在切换到 Main Activity 时会被破坏(停止)。在这种情况下最好使用服务,主屏幕将订阅结果。

【讨论】:

感谢您的回答。但是即使 Async Task 是一个单独的类并且仅从 Splash Screen 开始,它也会被销毁。如果是,那么我可以在应用程序类中创建一个方法,该方法将启动异步任务并仅从启动画面调用该方法。这样会好吗? 如果活动被销毁,那么所有对象都将被销毁并且任务停止。当在 Application 中创建任务时,它将在 Activity 销毁后继续工作。在这种情况下,您需要将 AsyncTask 的结果保存在您的应用程序中。 好的。非常感谢您。将在我的应用程序类中创建一个方法,然后让我的启动画面从中启动 AsyncTask。并且还将结果保存在我的应用程序类中。再次感谢。 好的。再想一想,如果从 Splash Screen 创建的 Async 任务在 Splash Screen 被破坏时被破坏会发生什么。会不会发生崩溃?或者会是最终用户会注意到的任何其他不利影响。 不,不会发生崩溃,但您可以查看此问题以获取更多信息:***.com/questions/2531336/…【参考方案2】:

所以基本上你想在启动画面中开始下载,然后在接下来的活动中继续下载。这样,你还是要实现一个加载动画。在您的情况下,我建议您在下载完所有内容后立即完成启动画面。这样,您就不必再在应用的生命周期内下载任何内容。

【讨论】:

感谢您的回答。非常抱歉,因为我没有在问题中提到我还有其他功能。有时在低端手机中加载需要很长时间,因此用户可能会关闭应用程序。【参考方案3】:

即使在切换到新活动后,AsyncTasks 也会继续运行。您可以尝试以下流程:

1. Splash screen
2. Trigger Async Task
3. Main Activity
4. Show Images/Videos

唯一的问题是,您将无法确定 #2 的完成时间以启动 #4。这就是 AsyncTasks 的本质。您可以通过在 AsyncTask 中使用 OnPostExecute 来解决问题。

示例:OnPostExecute 调用另一个将启用按钮的方法。用户可以单击按钮查看图像/视频。但是,看到某个按钮突然启用,这可能不是一个好的用户体验。

【讨论】:

【参考方案4】:

在这种情况下,我宁愿用自己的Handler(在单独的Thread 中工作)创建一些Singleton,它们将从Splash screen 开始。在Main screen 启动后,它应该向Singleton 询问各自的数据,或者应该为接收该数据签名。

【讨论】:

以上是关于在后台加载图像、视频的主要内容,如果未能解决你的问题,请参考以下文章

使用后台容器在自定义列表视图上加载动态数据

加载 HTML5 视频时如何制作加载图像?

在加载视频之前将Youtube视频缩略图设置为背景图像

如何在 HTML 5 中为音频、视频、css、图像创建预加载器?

通过单击 HTML/JS 文档中的图像加载视频

使用 C++ 加载视频和抓取图像的最佳方式