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

Posted

技术标签:

【中文标题】当应用程序从 WhatsApp 指纹屏幕等后台恢复时,每次打开启动画面【英文标题】:Every time open splash screen when application is resumed from background like WhatsApp fingerprint screen 【发布时间】: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
        
    


【问题讨论】:

【参考方案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 实现它。

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

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

【讨论】:

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

Flutter:从后台服务自动恢复应用程序

让锁屏的指纹传感器在后台监听指纹,Android

应用程序推送通知 - 收到并导航到屏幕 - 应用程序何时关闭?

iPhone iOS如何在应用程序从后台恢复时添加密码/密码锁定屏幕?

iPhone 停止在后台播放音频

在 Whatsapp 或 Viber 上接收推送通知即时消息