关于android:Activity延迟后打开

Activity opens after delay

本问题已经有最佳答案,请猛点这里访问。

场景 - ActivityA 可见。在按下 Android 设备的 Home 按钮时,ActivityA/App 进入后台并在 onUserLeaveHint() 中,触发打开 ActivityB 的意图。该应用程序会立即最小化,但 ActivityB 会在延迟 5-6 秒后打开。经过一些调试后,intent 会立即触发,但 ActivityB 的 onCreate() 会在 5-6 秒后调用。
PS - ActivityB 具有启动模式 - 单实例。

知道为什么会这样吗?

打开activity的代码如下-

1
2
3
4
5
6
    override fun onUserLeaveHint() {
    super.onUserLeaveHint()

    val intent = Intent(this, ActivityB::class.java)
    startActivity(intent)
}

ActivityB 在 manifest 文件中定义如下 -

1
2
3
4
5
6
7
8
9
10
11
<activity android:name=".activity.ActivityB"
             android:allowTaskReparenting="true"
             android:autoRemoveFromRecents="true"
             android:configChanges="screenSize|smallestScreenSize|screenLayout|orientation"
             android:excludeFromRecents="true"
             android:screenOrientation="portrait"
             android:noHistory="true"
             android:launchMode="singleInstance"
             android:taskAffinity=""
             android:supportsPictureInPicture="true"
             android:theme="@style/PipTheme"/>

PipTheme -

1
2
3
4
5
6
7
8
9
<style name="PipTheme" parent="Theme.AppCompat.Light.NoActionBar">
   <item name="android:windowIsTranslucent">true</item>
   <item name="android:windowBackground">@android:color/transparent</item>
   <item name="android:windowContentOverlay">@null</item>
   <item name="android:windowNoTitle">true</item>
   <item name="android:windowIsFloating">false</item>
   <item name="android:windowActionBar">false</item>
   <item name="android:windowFullscreen">true</item>
   <item name="android:backgroundDimEnabled">false</item>


https://issuetracker.google.com/issues/36910222
与其说是一个问题,不如说是一个框架功能,它阻止了应用程序在按下主页按钮时强制自己打开。

有几个解决方法:

  • 使用pendingIntent-

    val intent = Intent(context, ActivityB::class.java)
    val pendingIntent = PendingIntent.getActivity(context, 0, intent, 0)
    未决意图.send()

  • 使用报警管理器打开activtiy