在后台加载图像、视频
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
询问各自的数据,或者应该为接收该数据签名。
【讨论】:
以上是关于在后台加载图像、视频的主要内容,如果未能解决你的问题,请参考以下文章