【问题标题】:Every time open splash screen when application is resumed from background like WhatsApp fingerprint screen当应用程序从 WhatsApp 指纹屏幕等后台恢复时,每次打开启动画面
【发布时间】:2020-03-13 04:37:59
【问题描述】:

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

如何去掉那个白屏,每次都像 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
        }
    }
}

【问题讨论】:

    标签: android kotlin application-lifecycle


    【解决方案1】:

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

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

    <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 中拥有转换到其他活动的逻辑。

    我希望这会有所帮助。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        我认为您想要的不是每次都打开启动画面,而是在应用恢复时显示一些特定的屏幕。每次用户返回应用程序时,不应显示意识形态上的闪屏。

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

        1. 创建一个包含您的图片的背景资源。
        2. 在“splash”活动主题中将此资源指定为android:windowBackground。
        3. 设置这些主题以用于您的“飞溅”活动。

        有关更多信息,请查看article。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-11-28
          • 2018-09-21
          • 1970-01-01
          • 2014-11-28
          • 1970-01-01
          • 1970-01-01
          • 2023-03-29
          相关资源
          最近更新 更多