当我打开应用程序时,它会显示一个白色屏幕几秒钟,以启动服务和所有其他事情。
我可以使用自定义启动/加载屏幕加载器或任何其他方法来避免它吗?我可以把那些代码放在哪里?
帮助我,谢谢你...
答案 0 :(得分:1)
它的发生是因为你可能在应用程序UI线程中做了一些耗时的任务。您必须使用Async或单独的线程执行该任务。
每当您尝试在应用程序的主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; } }
有关详细信息Check
答案 1 :(得分:1)
@grlsHu回答绝对正确。此外,我建议在显示第一个屏幕后启动后台任务。这可以是Apps主要活动,或者 - 如果没有数据和内容就没有意义 - 一个闪屏。相比之下,如果你太早启动后台,它会同时运行到UI线程并显示第一个屏幕仍然需要很长时间。
这意味着:
onResume()
结束时,使用AsyncTask.execute(...)
启动后台任务。AsyncTask.onPostExecute()
完成Splashscreen的AsyncTask结束时,启动应用的主要活动。通过这种方法,您应该对用户做出直接反应,并开始启动所有服务。
答案 2 :(得分:1)
看这个How to avoid black screen in android while my app is loading? 这给了我一个创建像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"
这不是正确的解决方案,正确的解决方案是使用异步任务或处理程序。并在单独的线程中做事。
答案 3 :(得分:1)
这有助于您将其放入style.xml
this
答案 4 :(得分:0)
您可以在oncreate应用方法中添加loader(在线程中)。
答案 5 :(得分:0)
是的,实际上它与您的应用程序之外的启动器活动有关。
如果你没有在你的应用程序类中做任何事情(顺便说一句,如果你这样做,那么其他答案可能对你有用),那么你应该考虑使用一个比你的启动器活动更轻的启动活动,比如只有后台进度或其他东西,所以加载该屏幕会更容易。
或者您也可以在样式中设置windowBackground,因此它将至少显示您的背景,直到应用程序加载而不是白屏。