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