当我打开应用程序时,它会显示几秒钟的白屏以启动服务和所有其他操作。
我可以通过使用自定义启动/加载屏幕加载程序或任何其他方法来避免它吗?我可以把那个代码放在哪里?
帮助我,谢谢提前..
当我打开应用程序时,它会显示几秒钟的白屏以启动服务和所有其他操作。
我可以通过使用自定义启动/加载屏幕加载程序或任何其他方法来避免它吗?我可以把那个代码放在哪里?
帮助我,谢谢提前..
它的发生是因为您可能正在应用程序 UI 线程中执行一些耗时的任务。您必须使用异步或单独的线程来完成该任务。
每当您尝试在应用程序的主 UI 线程中执行一些耗时的任务时,它总是会阻塞 UI。
您也可以使用Handler
. 与标准 Java 相比,Android 提供了额外的构造来同时处理。您可以使用android.os.Handler
类或AsyncTasks
类。
该类AsyncTask
封装了后台进程的创建以及与主线程的同步。它还支持报告正在运行的任务的进度。
class task extends AsyncTask<String, Integer, String> { @Override protected String doInBackground(String... params) { //your logic return null; } }
更多详情请查看
@grlsHu 的回答是绝对正确的。此外,我建议在显示第一个屏幕后启动后台任务。这可以是应用程序的主要活动,或者 - 如果没有数据和内容就没有意义 - 启动屏幕。相反,如果你过早启动后台,它会同时运行到 UI 线程并且显示第一个屏幕仍然需要很长时间。
这表示:
onResume()
在Splashscreen结束时,使用 启动后台任务AsyncTask.execute(...)
。AsyncTask.onPostExecute()
完成 Splashscreen 并启动应用程序的主 Activity。使用这种方法,您应该对用户有直接反应并启动所有服务。
看看这个如何在我的应用程序加载时避免在 android 中出现黑屏? 这给了我一个想法来制作一个像 flash 这样的自定义主题,它解决了我的问题。对于那些正在寻找相同答案的人来说,这就是我的做法它对我有用,希望它也能帮助你们。在 style.xml 中。
<style name="MySplashTheme" parent="AppBaseTheme">
<item name="android:windowNoTitle">true</item>
<item name="android:windowBackground">@drawable/splash_image</item>
</style>
活动标签中的清单文件:
android:theme="@style/MySplashTheme"
好吧,这不是正确的解决方案,正确的解决方案是使用异步任务或处理程序。并在单独的线程中做事。
这将帮助您将其放入您的 style.xml
<item name="android:windowDisablePreview">true</item>
您可以在 application 的 oncreate 方法中添加 loader(in thread)。
是的,实际上它与您的应用程序之外的启动器活动有关。
如果您在应用程序类中没有做任何事情(顺便说一句,如果您这样做了,那么其他答案可能对您有用),那么您应该考虑放置一个启动器活动,它比您的启动器活动更轻,例如只有背景进度或其他东西,因此加载该屏幕会容易得多。
或者您也可以在样式中设置 windowBackground,因此它至少会显示您的背景,直到应用程序加载而不是白屏。