当应用程序从 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 指纹屏幕等后台恢复时,每次打开启动画面的主要内容,如果未能解决你的问题,请参考以下文章
应用程序推送通知 - 收到并导航到屏幕 - 应用程序何时关闭?