1

当我打开应用程序时,它会显示几秒钟的白屏以启动服务和所有其他操作。

我可以通过使用自定义启动/加载屏幕加载程序或任何其他方法来避免它吗?我可以把那个代码放在哪里?

帮助我,谢谢提前..

4

6 回答 6

1

它的发生是因为您可能正在应用程序 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;
              }
            }

更多详情请查看

于 2013-09-19T05:35:05.213 回答
1

@grlsHu 的回答是绝对正确的。此外,我建议在显示第一个屏幕后启动后台任务。这可以是应用程序的主要活动,或者 - 如果没有数据和内容就没有意义 - 启动屏幕。相反,如果你过早启动后台,它会同时运行到 UI 线程并且显示第一个屏幕仍然需要很长时间。

这表示:

  • 按照@grlsHu 的建议,使用 AsyncTask 将您的启动任务放在一个单独的线程中。
  • 创建一个可以在没有来自应用程序其余部分的数据或内容的情况下显示的 Activity。(闪屏)
  • 在 Manifest 中,将 Splashscreen 作为启动的屏幕。
  • onResume()在Splashscreen结束时,使用 启动后台任务AsyncTask.execute(...)
  • 在 AsyncTask 结束时,AsyncTask.onPostExecute()完成 Splashscreen 并启动应用程序的主 Activity。

使用这种方法,您应该对用户有直接反应并启动所有服务。

于 2013-09-19T06:01:23.003 回答
1

看看这个如何在我的应用程序加载时避免在 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"

好吧,这不是正确的解决方案,正确的解决方案是使用异步任务或处理程序。并在单独的线程中做事。

于 2014-05-02T09:49:05.660 回答
1

这将帮助您将其放入您的 style.xml

<item name="android:windowDisablePreview">true</item>

于 2016-05-25T11:37:14.137 回答
0

您可以在 application 的 oncreate 方法中添加 loader(in thread)。

于 2013-09-19T05:24:05.527 回答
0

是的,实际上它与您的应用程序之外的启动器活动有关。

如果您在应用程序类中没有做任何事情(顺便说一句,如果您这样做了,那么其他答案可能对您有用),那么您应该考虑放置一个启动器活动,它比您的启动器活动更轻,例如只有背景进度或其他东西,因此加载该屏幕会容易得多。

或者您也可以在样式中设置 windowBackground,因此它至少会显示您的背景,直到应用程序加载而不是白屏。

于 2013-09-19T06:10:24.987 回答