每次从后台恢复应用程序时都会打开启动屏幕,如WhatsApp指纹屏幕

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了每次从后台恢复应用程序时都会打开启动屏幕,如WhatsApp指纹屏幕相关的知识,希望对你有一定的参考价值。

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

如何删除该白色屏幕并每次都像WhatsApp屏幕一样打开?

这是我的应用程序类别

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 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
        }
    }
}

答案

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

另一答案

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

而不是从Application类注册生命周期回调,我认为您可能将SplashActivity作为启动程序活动,并在android:noHistory="true"中将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中过渡到其他活动的逻辑。

我希望有帮助。

另一答案

我认为您想要的不是每次都打开启动屏幕,而是在应用履历上显示一些特定的屏幕。从理论上讲,不应在用户每次返回应用程序时显示初始屏幕。

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

  1. 创建将包含您的图像的背景资源。
  2. 在“启动”活动主题中将此资源指定为android:windowBackground
  3. 设置这些主题以在您的“闪屏”活动中使用。

有关此详细信息,请检查此article

以上是关于每次从后台恢复应用程序时都会打开启动屏幕,如WhatsApp指纹屏幕的主要内容,如果未能解决你的问题,请参考以下文章

每次我的应用程序从后台进入前台时,IOS Default.png 都会显示 [重复]

试图学习如何用 python 制作一个不和谐的机器人。每次我尝试启动代码时都会出现相同的错误

在 Vuejs 中使用 beforemount 进行数据渲染,每次打开该组件/页面时都会不断增加渲染的数据列表

每次 3d 游戏套件项目启动时都会出现 14 个错误 [关闭]

【急!】每次刚打开MyEclipse时都会出现问题 导致无法使用【在线等答案】

Heroku:每次测功机重新启动时都会丢失 Django 数据库文件