应用程序需要很长时间才能启动黑屏

时间:2011-10-27 12:45:10

标签: android android-tabhost tabactivity oncreate

我有一个很大的问题,我的应用程序需要将近3秒才能启动/打开。在这3秒我只看到一个黑屏。 我知道这个黑屏的一些问题,但它们都不是问题。

我运行traceview,我发现onCreate需要超过2秒。我进一步深入了解,TabHost的addTab需要超过2秒。

addTab是否也调用每个Tab的每个Activity的onCreate? 我也有一个Custom_title_bar,但在删除custom_title之后它还需要2-3秒。

所有人都知道我能做些什么吗? 我真的需要每个标签中的不同活动,所以删除活动并使用视图是不可能的。

是否可以在Thread / AsyncTask中初始化TabBar并在完成后使MainActivity无效?

非常感谢和greetz - Mirko

编辑:我在这里添加了一些代码片段,首先是在MainActivity中我的onCreate中发生的事情:

    requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
    setContentView(R.layout.main_activity);
    getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.window_title);        

    Intent intent = new Intent(MainActivity.this, A.class);
    setupTab(R.string.tab_a, R.drawable..., intent);
    intent = new Intent(MainActivity.this, B.class);
    setupTab(R.string.tab_b,  R.drawable..., intent);
    intent = new Intent(MainActivity.this, C.class);
    setupTab(R.string.tab_c,  R.drawable..., intent);
    intent = new Intent(MainActivity.this, D.class);
    setupTab(R.string.tab_d, R.drawable..., intent);
    intent = new Intent(MainActivity.this, E.class);
    setupTab(R.string.tab_e,  R.drawable..., intent);

    mTabHost.setCurrentTab(0);

SetupTab:

private void setupTab(int labelRes, int iconRes, Intent intent) {
    String tag = (String) getText(labelRes);
    mSpec = mTabHost.newTabSpec(tag)
                  .setIndicator(createTabIndicator(this, tag, iconRes))
                  .setContent(intent);
    mTabHost.addTab(mSpec);
}

private View createTabIndicator(Context context, String title, int icon) {
    LinearLayout indicator = (LinearLayout) LayoutInflater.from(context).inflate(R.layout.tab_indicator, null);
    TextView label = (TextView) indicator.findViewById(android.R.id.title);
    if(title == null) label.setVisibility(View.GONE);
    else label.setText(title);
    ImageView tabicon = (ImageView) indicator.findViewById(android.R.id.icon);
    tabicon.setImageResource(icon);

    return indicator;
}

我还为我的应用程序设置了自定义主题。 在traceview中,方法tabhost.addTab()需要超过2000毫秒。也许这就是为什么我看到Blackscreen很长的原因。

有人知道为什么有BlackScreen吗?我想当我使用普通的不同应用程序时,没有BlackScreen。我知道如何更改BlackScreen:将主题中的android:background设置为不同的但不会解决时间问题。

我添加了一个SplashScreen但是当应用程序启动时我也会看到黑屏(但只有几毫秒)。 SplashScreen是一个带有ImageView的活动和没有标题的full_screen。它启动一个等待2秒的线程,然后打开MainActivity并自行完成。

2 个答案:

答案 0 :(得分:0)

我不太确定你的问题是什么 - 但对它来说是一个“解决方案”,可能会增加一个闪屏。 (这不是一个真正的解决方案,因为它只是掩盖问题而不是解决问题。)

查看this guide如何创建初始屏幕。

注意:您必须为我们提供一些代码示例,以便能够告诉您如何解决实际问题。

答案 1 :(得分:0)

问题: 我想,问题是custom_title功能。 对我来说唯一的方法是添加splashScreen。

第二种方法是自己创建TopTitleBar作为View而不是可自定义应用程序的一部分。

我认为这是个坏消息,因为黑屏让我的应用程序无法像android一样自定义告诉我:(