2010-12-09 66 views
2

我的应用程序在开始时需要大量时间加载,同时屏幕空白。有没有办法在应用程序启动时显示图像,然后在完成加载后显示布局?android启动图像

回答

4

如果您的应用程序中有多个活动,但如果您只是在讨论单个活动,则该活动本身不会显示任何内容,直到onResume()为调用。在此之前,唯一会显示的是应用程序/活动的背景图像。为您的活动设置背景图片可以大大提高感知的启动速度,因为它们会立即显示。 Romain Guy在这里讨论一下背景图像:http://www.curious-creature.org/2009/03/04/speed-up-your-android-ui/

如果你的应用程序有很多启动嘎吱嘎吱做,那么你应该做一个单独的线程的工作,并让onCreate(),onStart(),onResume()快速进行。这些方法应该尽可能少地做,以便活动尽快显示给用户。如果您希望加载或启动画面在加载时可见,则可以使用不同的方法。为了简单起见,我们假设你只是想要一个没有动画的加载屏幕,只是一个图像。一种方法是通过XML将活动背景图像设置为加载屏幕图像。在onCreate()启动一个线程与您的加载过程,所以它不需要等待它完成,以继续启动活动。在XML布局中,为您的布局设置根视图组,以使其可见性消失。这样你的视图就不会出现,它只会显示背景加载图像。它也将允许这些观点被夸大和设置。

然后,当这些过程完成后,将ViewGroup的可见性设置为可见并让用户看到它,如果需要,也可以更改背景图像。

如果你不想去启动屏幕的路线,仍然确保在启动方法没有长时间运行的方法发生,让他们到另一个线程。您可以立即显示您的活动,并根据需要放置加载动画。

显然有很多方法,这一切取决于你真正需要什么。希望在某些方面有所帮助。

1

我会问自己 - 为什么需要很长时间才能加载?你是否描述过它?你能改善吗?你应该专注于此。除了这个,是的,你可以添加一个启动画面(我建议人们不要这样做) - 你可以使用ViewFlipper或FrameLayout在两个布局之间切换,也可以有两个单独的活动。

+0

为什么你不建议启动画面?它们非常无处不在,几乎每个人都知道它们在看到它们时的样子。 UI设计的一个主要租户(就我而言)不会让用户感到惊讶。启动画面是他们习惯看的东西。只是好奇你为什么认为启动屏幕不是要走的路 - 我可能只是改变我的想法:) – SRM 2010-12-09 02:20:47

+0

我发现启动画面没问题,但不喜欢如果你不能点击它们继续进行,但不得不等待延迟开发人员投入。 – 2010-12-09 02:36:36

+0

好..应用程序读取RSS源并以列表形式显示信息。因此整个RSS提要必须被解析,否则它没有开始活动的意义......提要中有超过40个项目... – 2010-12-09 23:45:32

1

Theres有几种方法可以做到这一点,但最简单和最直接的方法是从您的启动画面活动启动您的长时间加载活动。

另一种技术是将初始化和加载卸载到单独的线程。

1

您也可以在后台线程中完成所有耗时的工作,并且一旦您的布局被充满并且所有资源都被加载,就可以使用Viewgroup.addView

  1. 把一些最低布局在您的活动
  2. 创建在onStart线程加载使用LayoutInflator
  3. 你的资源和布局一旦你交一个Runnable通过处理器来交换布局做主线使用addView的活动
1

我想更新这个问题到今年,因为我有同样的问题,我发现它在谷歌。

在值目录,如果你没有它,创建一个样式文件是这样的:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <style name="AppBaseTheme" parent="android:Theme.Holo.NoActionBar.Fullscreen"> 
     <item name="android:windowBackground">@color/your_color</item> 
    </style> 
</resources> 

现在去AndroidManifest.xml中,和样式添加到您的活动启动:

<activity 
    android:name=".Main" 
    android:theme="@style/AppBaseTheme" > 
    <intent-filter> 
     <action android:name="android.intent.action.MAIN" /> 

     <category android:name="android.intent.category.LAUNCHER" /> 
    </intent-filter> 
</activity> 
0

你需要飞溅screnn。你可以看看我的answer多数民众赞成在解释启动画面。