3

当我开始我的活动时,我注意到一个短暂的延迟。我点击我的应用程序图标,主屏幕会在屏幕上停留大约 1-1.5 秒,然后才会显示我的活动。

我的活动的 onCreate 方法大约需要 800 毫秒才能完成。

我还注意到android:screenOrientation="landscape",即使我使用带有空布局的测试活动,设置也会增加明显的延迟。

有没有办法摆脱这种延迟,或者至少在加载 UI 时显示黑屏?

已编辑:请参阅下面的测试活动代码。在我的实际活动中,还有许多其他加载,包括 GUI 元素和引擎逻辑、声音等。真正的问题是即使使用这个小型测试活动,延迟也是可见的。


测试活动代码:

public class TestActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // Set full screen mode and disable
        // the keyguard (lockscreen)
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN  
                             | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD 
                             | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
                             | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

        setContentView(R.layout.main);
    }
}

布局 XML:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:keepScreenOn="true"  >
</FrameLayout>

显现:

<activity
    android:name=".TestActivity"
    android:configChanges="orientation|keyboardHidden"
    android:label="@string/app_name"
    android:screenOrientation="landscape"
    android:windowSoftInputMode="stateAlwaysHidden|adjustPan" >
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />

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

2 回答 2

2

您可以将默认活动设置为接近空白的活动,该活动仅显示背景并开始您的真实活动..就像启动屏幕一样

于 2012-05-01T18:52:36.017 回答
0

Ans Drake 给出的是完美的,但可以扩展它 - 让您想要让您的自定义初始屏幕图像始终可见,如果我们将颜色应用于窗口,那么将从颜色切换到实际斜线屏幕。这可能是一个糟糕的用户体验。我建议的 ans 不需要 setContentView,而只需要通过主题管理启动画面。

我们无法在 java 中设置主题,因为在我的情况下,控件很晚才出现在我的启动活动的 onCreate 中。直到那时黑屏仍然可见。

这让我想到必须从我们在清单中指定的主题管理窗口。

我有一个清单:

<activity
        android:name=".main.activities.SplashScreen"
        android:theme="@style/Splash"
        android:screenOrientation="portrait">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
</activity>

现在我创建的主题如下:

<style name="Splash" parent="@style/Theme.AppCompat.Light">
    <item name="android:windowBackground">@drawable/splash</item>
    <item name="android:windowNoTitle">true</item>
    <item name="windowNoTitle">true</item>
    <item name="colorPrimaryDark">@color/green_09</item>
    <item name="colorPrimary">@color/green_09</item>
    <item name="windowActionBar">false</item>
</style>

在包含位图资源的可绘制资源中飞溅,我必须进行一些调整以使其看起来完美而不是拉伸并位于中心:

<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
    android:antialias="true"
    android:dither="true"
    android:gravity="fill"
    android:src="@drawable/splash_screen" />
于 2016-05-03T11:44:51.487 回答