每次从 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 访问该应用程序时都显示启动画面。
您为此使用的方法是正确的。如果你想要一个显示你的图像而不是白屏的屏幕,你应该通过主题实现它。
- 创建将包含您的图像的背景资源。
- 在您的 "splash" activity 主题中将此资源指定为
android:windowBackground
。
- 设置这些主题以在您的 "splash" activity.
中使用
有关此的更多信息,请查看此 article。
我想打开一个包含图像的屏幕,当我的应用程序恢复时,我想显示该屏幕。但是问题是,在恢复应用的时候先是白屏。
如何去掉那个白屏,每次都像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 访问该应用程序时都显示启动画面。
您为此使用的方法是正确的。如果你想要一个显示你的图像而不是白屏的屏幕,你应该通过主题实现它。
- 创建将包含您的图像的背景资源。
- 在您的 "splash" activity 主题中将此资源指定为
android:windowBackground
。 - 设置这些主题以在您的 "splash" activity. 中使用
有关此的更多信息,请查看此 article。