如何以正确的方式制作启动画面,即不使其成为应用程序流程的一部分?
Posted
技术标签:
【中文标题】如何以正确的方式制作启动画面,即不使其成为应用程序流程的一部分?【英文标题】:How to make a Splash screen the proper way i.e. not to make it a part of the app process? 【发布时间】:2021-11-09 23:55:09 【问题描述】:我是安卓新手。我想在我的应用程序中添加启动画面。我经历了这个official documentation。
它说
当用户在应用进程未运行(冷启动)或 Activity 尚未创建(热启动)时启动应用时,会发生以下事件。 (热启动期间从不显示启动画面。) 1) 系统使用您定义的主题和任何动画显示启动画面。 2) 应用准备就绪后,启动画面消失并显示应用。
尽管像下面给出的代码 sn-p 那样将 Activity 实现为启动屏幕可以完成这项工作
class SplashScreenActivity : AppCompatActivity()
override fun onCreate(savedInstanceState: Bundle?)
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_splash_screen)
supportActionBar?.hide()
Handler(Looper.getMainLooper()).postDelayed(
val intent = Intent(this, MainActivity::class.java)
startActivity(intent)
finish()
, 2000)
但我想这不是传统的方式,因为启动画面成为应用程序进程的一部分,它在几毫秒长的黑屏后开始。
我猜这是系统获取应用程序数据资源的时候,并且应该启动启动画面,至少这就是 Google play store 或 Whatsapp 或其他所有已安装的应用程序都会立即启动启动画面。
现在,正如文档所坚持的那样,当我尝试设置主题属性时,我收到错误消息Cannot resolve symbol 'android:windowSplashScreenBackground'
。这是我的 style.xml
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"
xmlns:android="http://schemas.android.com/apk/res/android">
<style name="Theme.Books" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
<item name="colorPrimary">@color/purple_500</item>
<item name="colorPrimaryVariant">@color/purple_700</item>
<item name="colorOnPrimary">@color/white</item>
<item name="colorSecondary">@color/teal_200</item>
<item name="colorSecondaryVariant">@color/teal_700</item>
<item name="colorOnSecondary">@color/black</item>
<item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
<!-- Unresolved -->
<item name="android:windowSplashScreenBackground">@color/black</item>
<item name="android:windowSplashScreenAnimationDuration">1000</item>
<item name="android:windowSplashScreenAnimatedIcon">@drawable/books_logo</item>
</style>
</resources>
所以, 1。如何克服这个问题?
2。还有其他方法吗?
3.我错过了什么吗?有没有办法以某种方式将活动与应用进程分离?
感谢任何形式的帮助。谢谢!
【问题讨论】:
【参考方案1】:您是否尝试过关注这篇文章?
Implementing Core Splashscreen API
我从教程中得到了什么:
你需要在setContentView(R.id.***)
之前调用installSplashScreen()
您需要修改文章中所示的styles.xml,使用自定义SplashScreen属性(然后将App Theme设置为那个)see here
只需删除您的 SplashScreenActivity,使用 Handler.postDelayed 也不是处理此问题的好方法(库自己处理切换显示的内容,只需使用您的 MainActivity)
【讨论】:
简短而准确,这篇文章比官方的有用得多。非常感谢你! 没问题,也是我环顾四周时的外卖。唯一可能有帮助的是这个迁移指南(比...创建指南更详细)developer.android.com/about/versions/12/splash-screen-migration以上是关于如何以正确的方式制作启动画面,即不使其成为应用程序流程的一部分?的主要内容,如果未能解决你的问题,请参考以下文章
SQLAlchemy:如何在不使其成为主键的情况下使整数列 auto_increment (且唯一)?