我正在尝试制作一个要显示一些图像和视频的应用程序。因此,我计划添加大约2秒的启动屏幕。 2秒后,用户将被带到应用程序的主屏幕。
我想在用户位于初始屏幕时开始加载图像,视频,以便用户在主屏幕上等待的时间最少。
因此,将在启动屏幕上开始加载,然后在两秒钟后,无论加载完成如何,都会将用户带到主屏幕。 现在,由于涉及到两个活动,我应该使用异步任务还是应该在其中使用带有异步任务的服务(用于代码完成的回调)?
哪个会更好。 在Android 8.0中,使用服务也有任何限制吗?
我认为如果未正确编码,在两个屏幕之间使用异步任务可能会导致内存泄漏。
任何帮助都会非常感激。
编辑:我的应用程序还具有一项功能,因此无法使用户在启动屏幕中等待加载结束。
答案 0 :(得分:3)
使用AsyncTask在两个活动之间共享结果不是很好,因为在Splash活动中创建的AsyncTack在切换到Main活动时将被存储(停止)。在这种情况下最好使用服务,并且主屏幕将订阅结果。
答案 1 :(得分:1)
因此,基本上,您希望在启动屏幕中开始下载,并在随后的活动中继续下载。这样,您仍然必须实现加载动画。对于您而言,我建议您在下载所有内容后立即完成启动屏幕。这样,您就不必在应用程序的生命周期内下载任何内容。
答案 2 :(得分:0)
AsyncTasks即使在切换到新活动后仍继续运行。您可以尝试以下流程:
1. Splash screen
2. Trigger Async Task
3. Main Activity
4. Show Images/Videos
唯一的问题是,您将无法确定2号完成启动4号所需的时间。这是AsyncTasks的本质。您可以通过在AsyncTask中使用OnPostExecute来解决。
示例:OnPostExecute调用另一个启用按钮的方法。用户可以单击按钮查看图像/视频。但是,如果突然看到某个按钮被启用,这可能不是一个很好的用户体验。
答案 3 :(得分:0)
在那种情况下,我宁愿创建一些具有自己的Singleton
(在单独的Handler
中工作)的Thread
,该地址将从Splash screen
开始。 Main screen
启动之后,它应该询问Singleton
有关各自的数据,或者应该签名以接收该数据。