Android:活动之间的黑屏

时间:2015-12-18 10:08:25

标签: android android-layout android-intent android-activity

当我将一个活动转到另一个活动时,在交易之间,黑色屏幕会持续几秒钟。我在调用 startActvity()之前正确完成了活动。

我的活动使用 android:theme =“@ android:style / Theme.Translucent”主题。即使在活动交易之间出现了黑屏

任何人都可以告诉我如何解决这个问题

提前致谢:)

5 个答案:

答案 0 :(得分:2)

禁用此默认动画创建一种样式:

<style name="noAnimTheme" parent="android:Theme">
<item name="android:windowAnimationStyle">@null</item>
</style>

并将其设置为清单中活动的主题:

<activity android:name=".ui.ArticlesActivity" android:theme="@style/noAnimTheme">
</activity>

答案 1 :(得分:1)

在调用startActivity()之前无需完成活动。

确保您已在被调用的Activity的onCreate中设置了内容视图,并且您没有阻止UI线程(如果您已覆盖它们,请检查onCreate,onStart和onResume)。

答案 2 :(得分:1)

假设: -

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.xyz);

    // comment code here
    }

如果你从活动A转到B然后尝试在OnCreate中注释代码,在活动B中注释OnResume像这样并检查仍然会出现黑屏的情况。如果出现,则尝试更改主题。

答案 3 :(得分:1)

您不需要管理finshing您的活动,当活动不再可见时,这将自动管理。只需使用:

startActivity(new Intent(this, MyNextActivity.class));

并使用此代码以您用于导航活动更改的任何方法。

如果您确保您的窗口是活动的背景,您可以将窗口背景设置为黑色以外的颜色:

<item name="android:windowBackground">@drawable/window_background</item>

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
    <solid android:color="@color/window_background"/>
</shape>

windowBackground in Android 6 (Marshmallow)

另一个选项是管理转换,因此第一个转换的结束和第二个转换的开始之间没有间隙。但是,您没有提到过渡。

How to remove the delay when opening an Activity with a DrawerLayout?

答案 4 :(得分:0)

如果您具有finish()或FLAG_ACTIVITY_CLEAR_TASK-ICS之前的设备上可能会出现空白屏幕

要避免出现黑屏,您必须在意图中添加一行

overridePendingTransition (0, 0);

示例(kotlin):

val intent = Intent(applicationContext, MainActivity::class.java)
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
startActivity(intent)
overridePendingTransition (0, 0)

示例(Java):

Intent intent = new Intent(getApplicationContext(), MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
overridePendingTransition (0, 0);