🌟

android12からのSplashScreenについてメモ&削除方法追記(しかし更なる問題が.......)

2022/04/05に公開

android12からのSplashScreenとは

androidには今までちゃんとしたsplashが存在しなかったので

android12で遂に実装しましたよ!!というもの。


基本的にthemeとかdrawbleで設定するだけなので

複雑なsplashを作ることはできなそう。


なので複雑なsplashを使いたい人は

SplashScreen+専用のActivityなどの混合で対応する必要がありそう。


それならSplashScreen消したほうがいいんじゃない???

とは思ったが消すことができない

(消す方法を発見しました!!)

今まで出てこなかったタイミングで勝手に出てくる

ようになってしまったみたいです。

今まで出てこなかったタイミングというのは

ウォームスタートというタイミングみたいです。

詳しくはこちら

https://developer.android.com/topic/performance/vitals/launch-time?hl=ja


なので変に消すと逆に変な描画になってしまうので

両方表示されても違和感のないぐらいのデザインに落とし込むのが

ベターなのかなぁという印象です。

android12以前でもSplashScreenを使いたい

こちら

https://developer.android.com/jetpack/androidx/releases/core?hl=ja#core-splashscreen-1.0.0-beta02

を使うことで

android12以前でも同じような挙動のsplashを作成することができるようです。

SplashScreenを消す

https://stackoverflow.com/questions/68110639/remove-default-splash-screen-from-android-12-example

ベースとなるActivityのテーマに

<item name="android:windowIsTranslucent">true</item>

こちらを追記することで

SplashScreenを透明にすることで実質消すことができる。


あまりよくわかっていないが

この対応をすることでアプリが応答していないように見える

(透明にしてしまっているのでウォームスタートとかで変な表示になるのかも?)

らしいので、その場合はこのようにするといいらしい

private void setupOnPreDrawListenerToRootView() {
  View mViewContent = findViewById(android.R.id.content);
  mViewContent.getViewTreeObserver().addOnPreDrawListener(
       new ViewTreeObserver.OnPreDrawListener() {
           @Override
           public boolean onPreDraw() {
               Log.v("onPreDraw","onPreDraw called");
               if (isAppInitialized) {
                    mViewContent.getViewTreeObserver().removeOnPreDrawListener(this);
                    startActivity(new Intent(this, MainActivity.class));

                   return true;
               } else {
                   // The content is not ready; suspend.
                   return false;
               }
           }
       });
}

しかし更なる問題が........

アプリテーマにこちらを設定すると

なんとandroid8でクラッシュします

ほんまandroid8くん........

回避方法は恐らくないのでandroid8対応を諦めるしかなさそうです。

フルComposeのプロジェクトだと

activityにxmlレイアウトを組み込む必要がないので

回避できるかと思ったんですがだめでした;;;;;;

https://tech.studyplus.co.jp/entry/2018/12/10/125101

参考記事

https://developer.android.com/reference/kotlin/androidx/core/splashscreen/SplashScreen

https://developer.android.com/topic/performance/vitals/launch-time?hl=ja

https://developer.android.com/about/versions/12/features/splash-screen?hl=ja

https://developer.android.com/guide/topics/ui/splash-screen/migrate

https://developer.android.com/jetpack/androidx/releases/core?hl=ja#core-splashscreen-1.0.0-beta02

https://takusan.negitoro.dev/posts/android_12_splashscreen/

https://qiita.com/irgaly/items/7ebba96f16462158579d#対応2-スプラッシュ画面も-splashactivity-も表示する

https://zenn.dev/yurihondo/articles/7da088ec4540c0

https://stackoverflow.com/questions/68110639/remove-default-splash-screen-from-android-12-example

https://tech.studyplus.co.jp/entry/2018/12/10/125101

Discussion