Theme.NoDisplay创造了延迟

Mac*_*kan 7 android android-intent

使用Theme.NoDisplay主题时出现了一个奇怪的错误:显示另一个活动非常慢!

我从通知中打开一个不可见的活动,然后根据意图操作打开一个新的活动.

如果我使用任何其他主题,Theme.AppCompat那么打开输入对话框需要大约300毫秒.以Theme.NoDisplay主题为主,大约需要5秒钟!

如果我使用的logcat的话,我可以看到onCreate,onResume等在InputActivity被创建看不见的活动后,所谓的几毫秒,但直到它实际上是可见的,它需要几秒钟.我不明白该主题如何创建该效果或如何解决它(不使用服务).

无形的活动:

<activity
    android:name=".InvisibleActivity"
    android:excludeFromRecents="true"
    android:noHistory="true"
    android:launchMode="singleTask"
    android:taskAffinity=""
    android:theme="@android:style/Theme.NoDisplay"/>
Run Code Online (Sandbox Code Playgroud)

要打开的活动:

<activity
    android:name=".InputActivity"
    android:configChanges="locale"
    android:hardwareAccelerated="false"
    android:label="@string/lblAddTime"
    android:theme="@style/theme.Dialog"
    android:windowSoftInputMode="stateVisible|adjustResize" />
Run Code Online (Sandbox Code Playgroud)

通知的意图:

Intent stopIntent = new Intent(context, InvisibleActivity.class);
stopIntent.setAction(InvisibleActivity.STOP_TIMER);
stopIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);

PendingIntent pStopIntent = PendingIntent.getActivity(context, 0, stopIntent, 0);
Run Code Online (Sandbox Code Playgroud)

而在onCreateInvisibleActivity,这就是所谓的:

Intent i = new Intent(getApplicationContext(), InputActivity.class);
startActivity(i);
Run Code Online (Sandbox Code Playgroud)

mha*_*im6 1

这是相当古老的,但如果有人想知道,这个链接讨论了为什么会发生这种情况:

PSA:如果使用 Theme.NoDisplay 则立即完成活动的新要求不是回归,这一直是它的要求(请参阅 https://developer.android.com/reference/android/R.style.html# 例如Theme_NoDisplay )。

如果不使用它,M 中的平台现在会使应用程序崩溃的原因是,如果不使用它,以前会以非常微妙和神秘的方式崩溃。例如,有时您的应用程序会无缘无故地出现 ANR。