每次从 WhatsApp 指纹屏幕等后台恢复应用程序时打开启动画面

Every time open splash screen when application is resumed from background like WhatsApp fingerprint screen

我想打开一个包含图像的屏幕,当我的应用程序恢复时,我想显示该屏幕。但是问题是,在恢复应用的时候先是白屏。

如何去掉那个白屏,每次都像WhatsApp一样打开?

这是我的应用程序Class

class App : Application() {
    private var context: Context? = null

    override fun onCreate() {
        super.onCreate()
        context = this
        registerActivityLifecycleCallbacks(AppLifecycleTracker())
    }

    companion object {
        @SuppressLint("StaticFieldLeak")
        private val instance: App? = null
        fun getContext(): App? {
            return instance
        }
    }

AppLifecycleTracker class

class AppLifecycleTracker : Application.ActivityLifecycleCallbacks {
    override fun onActivityPaused(activity: Activity) {
        println("AppLifecycleTracker onActivityPaused")
    }

    override fun onActivityDestroyed(activity: Activity) {
        println("AppLifecycleTracker onActivityDestroyed")
    }

    override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle) {
        println("AppLifecycleTracker onActivitySaveInstanceState")
    }

    override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) {
        println("AppLifecycleTracker onActivityCreated")
    }

    override fun onActivityResumed(activity: Activity) {
        println("AppLifecycleTracker onActivityResumed ${activity}")
    }

    private var numStarted = 0

    override fun onActivityStarted(activity: Activity?) {
        if (numStarted == 0) {
            println("AppLifecycleTracker Foreground")
            if (App.sinltonPojo?.launchData == 1) {
                activity?.startActivity(Intent(activity.application, GifViewActivity::class.java))
                activity?.overridePendingTransition(R.anim.enter, R.anim.exit)
            }
        }

        numStarted++
    }

    override fun onActivityStopped(activity: Activity?) {
        numStarted--
        if (numStarted == 0) {
            // app went to background
        }
    }
}

一种方法是在 activity onStop() 中调用 finish();。这样您的应用将在下次重新打开启动器 activity。

实际上有很多方法可以做到这一点。您可以考虑以下内容。

我认为您可能有一个 SplashActivity 作为启动器 activity 并使用 android:noHistory="true",而不是从您的 Application class 注册生命周期回调在您的 AndroidManifest.xml 中进行所有其他活动。

<activity
    android:noHistory="true"
    android:label="@string/app_name"
    android:name=".activities.SplashActivity">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

<activity
    android:noHistory="true"
    android:name=".activities.MainActivity" />

这样,您可以在每次从后台恢复时启动您的 SplashActivity,并且您可以在您的 SplashActivity 中拥有转换到其他活动的逻辑。

希望对您有所帮助。

我想你想要的不是每次都打开启动画面,而是在应用程序简历上显示一些特定的屏幕。从意识形态上讲,不应在每次用户 returns 访问该应用程序时都显示启动画面。

您为此使用的方法是正确的。如果你想要一个显示你的图像而不是白屏的屏幕,你应该通过主题实现它。

  1. 创建将包含您的图像的背景资源。
  2. 在您的 "splash" activity 主题中将此资源指定为 android:windowBackground
  3. 设置这些主题以在您的 "splash" activity.
  4. 中使用

有关此的更多信息,请查看此 article