【问题标题】:Is there a way to show splashscreen during onCreate?有没有办法在 onCreate 期间显示启动画面?
【发布时间】:2011-09-06 08:34:21
【问题描述】:

也许这不是最好的方法,但我的应用程序使用onCreate 将相当多的布局加载/准备到ViewAnimator,所以在应用程序启动后,我的应用程序的每个屏幕都准备好使用。因此更换不同的屏幕既流畅又快速。

这种方法的缺点是,第一个布局需要 5 秒才能出现。确切地说 - ViewAnimator 的所有屏幕都在 XML 布局中定义,我假设它们在 onCreate 期间被膨胀。

我的应用程序必须有一个启动画面,所以我的问题是,是否有办法使用这 5 秒来显示一些图像?

编辑:

感谢您的回答,我想出了这个简单的解决方案:

Activity activity;
public void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main_splash);
    activity = this;
    LinearLayout splash_layout = (LinearLayout) this.findViewById(R.id.splash_layout);

    // after 1 second of splash screen, start initializing everything
    splash_layout.postDelayed(new Runnable() 
    {   
        public void run() 
        {
            activity.setContentView(R.layout.main);

            // Here init whole layout and all class
            // During initialization, the splashscreen is still visible
        }
    }, 1000);
}

【问题讨论】:

    标签: android multithreading android-layout


    【解决方案1】:

    我认为在 onResume 退出并且主线程开始为消息提供服务之前,不会看到任何屏幕。您可以使用 2 个 .xml 布局吗?一个在启动时立即加载启动画面,然后在活动开始后使用布局充气器开始加载屏幕的其余部分?

    【讨论】:

    • 你说的完全正确;我删除了我的答案以支持这个。提出问题的人应该做的是创建一个新的 Activity 来显示启动屏幕,然后启动他们的 Activity 来显示主要布局。这样,启动屏幕将一直显示,直到显示主布局。
    • 是的,到目前为止,这似乎也是我唯一的选择。首先,实现这一点似乎很困难,但如果我只有一个 main.xml 在一切之上,也许它应该工作。如我所见,还有 setContentView() 以 view 作为参数。
    • 有效!我用一个简单的解决方案更新了我的问题。谢谢。
    【解决方案2】:

    如果我是你,我会将长时间运行的任务移出 Activity.onCreate() 方法,因为它可能会导致 ANR = Application Not Responding 错误,对另一个线程说。

    【讨论】:

    • 还有这个。不要因为这个原因让应用程序挂起五秒钟。
    【解决方案3】:

    为了在我的应用程序中实现这种效果,我只需使用一个视图,其中包含您想要的任何图像。并使用淡入淡出动画。

    查看此问题以获得一种可能的解决方案:Android change layout dynamically

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多