Почему белый экран застревает после заставки в ionic 4?

Я бегу ionic cordova run android для моего проекта ионных Cordova. В настоящее время мой мобильный телефон подключен к компьютеру через USB. поэтому, когда я запускаю эту команду, она устанавливает приложение на моем реальном устройстве Android Redmi Note 6 PRO. но на самом деле происходит, когда приложение открывается, появляется только белый экран, больше ничего. Сначала он показывает заставку, а затем белый экран навсегда. Почему такое поведение происходит? Я где-то читал, и я думаю, что некоторые люди имели эту проблему из-за ionic 4. Пожалуйста, помогите.

Я собираюсь вставить ссылку для вставки, где отображаются журналы logcat после того, как я нажму на приложение, чтобы открыть его на эмуляторе Android (на эмуляторе Android также отображается белый экран).

Вот. https://pastebin.com/nLiY8w0b

Chrome отладчик показывает - https://pastebin.com/EzdyV3Tw

10 ответов

Я решил эту проблему, установив правильные параметры в config.xml

<preference name="AutoHideSplashScreen" value="false" />
 <preference name="SplashScreenDelay" value="10000" />
 <preference name="FadeSplashScreenDuration" value="1000" />
 <preference name="SplashScreen" value="screen" />
 <preference name="ShowSplashScreen" value="true" />
 <preference name="ShowSplashScreenSpinner" value="false" />
 <preference name="SplashShowOnlyFirstTime" value="false" />
 <preference name="FadeSplashScreen" value="true" />

Тогда на моем platform.ready() instruction all I do is Splashscreen.hide();

и после этого запустите проект на Android с помощью

ionic cordova run android

Нашел решение. Проблема была в https://github.com/NeoLSN/cordova-plugin-android-permissions. На Android 6+ (может быть Android 5 тоже, у меня его нет на моих устройствах) пользователь должен принимать разрешения вручную. В приложении разрешение на запрос выглядит как предупреждение. И это предупреждение автоматически останавливает заставку (даже если вы не скрываете заставку автоматически и еще не вызываете метод скрытия) и отключает анимацию исчезновения. Также этот запрос разрешений нарушил заставку, даже если разрешения уже добавлены.

Поэтому решение состоит в том, чтобы запрашивать разрешения после splashScreen.hide() после задержки, равной тайм-ауту затухания.

пример:
config.xml

<preference name="SplashMaintainAspectRatio" value="true" />
<preference name="SplashShowOnlyFirstTime" value="false" />
<preference name="FadeSplashScreenDuration" value="1000" />
<preference name="SplashScreenDelay" value="30000" />
<preference name="ShowSplashScreenSpinner" value="false" />
<preference name="AutoHideSplashScreen" value="false" />
<preference name="FadeSplashScreen" value="true" />
<preference name="ShowSplashScreen" value="true" />

В app.components.ts

  initializeApp() {
    this.platform.ready().then(() => {
      setTimeout(() => {
        this.splashScreen.hide();
      }, 1000);
    }
  }

ОТМЕТИЛ!!! задержка setTimeout должна быть равна значению параметра FadeSplashScreenDuration в config.xml

Вывод: приведенный выше код плавно перешел с экрана-заставки, который плавно исчезнет на стартовой странице. Белый экран вообще не отображается. Надеюсь, это будет полезно.

При изменении config.xmlу вас не сработало, ПОПРОБУЙТЕ ЭТО

Шаг 1:
Открытьindex.html
Измените базовый href с <base href="/" /> к <base href="./" />

Шаг 2:
Открытьtsconfig.json
Измените цель в compilerOptions с "target": "es2015" к "target": "es5"

Ссылка: https://github.com/ionic-team/capacitor/issues/1878

Я также столкнулся с этой проблемой, но в моем случае проблема с маршрутизацией по умолчанию.

Когда приложение инициализируется, оно пытается открыть маршрут по умолчанию, который является Пустым маршрутом, который далее мы перенаправляем на фактический рабочий маршрут. В моем случае Пустой маршрут был перенаправлен на "/ панель инструментов".

Пример кода

const routes: Routes = [
  {
    path: '',
    redirectTo: 'dashboard',
    pathMatch: 'full'
  },
  {
    path: 'dashboard',
    canActivate: [AuthGuard],
    loadChildren: './home/home.module#HomePageModule'
  },
  { path: 'login',
    loadChildren: './public/login/login.module#LoginPageModule' }

В приведенном выше коде мой пустой маршрут перенаправляется на панель инструментов, где [AuthGuard] активен, и он застрял в обращении, поэтому я решил перенаправить на маршрут, где [AuthGuard] не активен, то есть "/login" в моем случае, Обновлен код путем перенаправления на страницу входа, где [Authgaurd] не активен.

 const routes: Routes = [
      {
        path: '',
        redirectTo: 'login',
        pathMatch: 'full'
      },
      {
        path: 'dashboard',
        canActivate: [AuthGuard],
        loadChildren: './home/home.module#HomePageModule'
      },
      { path: 'login',
        loadChildren: './public/login/login.module#LoginPageModule' }

После создания проекта для Andriod, приложение работает успешно.

Justed опубликовал ответ, если у кого-то есть такая же проблема, как и у меня, по той же проблеме.

config.xml

 <preference name="auto-hide-splash-screen" value="false" /> 
 <preference name="AutoHideSplashScreen" value="false" />

main.js, пожалуйста, измените

this.platform.ready().then(function () {
        _this.statusBar.styleDefault();
        _this.splashScreen.hide();
    });

к

this.platform.ready().then(function () {
            _this.statusBar.styleDefault();
            setTimeout(function(){
                _this.splashScreen.hide();

            }, 3000);
        });

Отладьте ваше приложение и проверьте, не показывало ли приложение ошибки на белом экране, главным образом из-за ошибок в приложении.

Если вы все еще здесь без ответа, вот как я это решил.

      $ ionic cordova run android --simulator --verbose --optimization=false

Если он собирается, запускается, а затем переходит на белый экран, настройте Chrome для режима разработчика, а затем откройте следующую страницу.

chrome: // inspect / # устройств

Проверьте журналы консоли на наличие ошибок и исправьте их при необходимости. Странно было то, что он отлично работал в обычном веб-браузере.

Примечание: флаг --optimization=false важен, чтобы вы могли легко читать ошибки.

Удачи

Поместите это в ваш файл config.xml

<preference name="ScrollEnabled" value="false" />
<preference name="android-minSdkVersion" value="19" />
<preference name="BackupWebStorage" value="none" />
<preference name="SplashMaintainAspectRatio" value="true" />
<preference name="FadeSplashScreenDuration" value="300" />
<preference name="SplashShowOnlyFirstTime" value="false" />
<preference name="SplashScreen" value="screen" />
<preference name="AutoHideSplashScreen" value="false" />
<preference name="SplashScreenDelay" value="3000" />

затем выполните эту команду: ionic cordova build android создаст файл apk здесь: your_project_folder/platform / android / app / build / output /apk/debug/app-debug.apk

Это должно работать без зависания белого экрана после заставки

В моем случае это было связано с конфигурацией платформы Android. Я сделал следующее, чтобы решить проблему:

  1. удалять android папка (в каталоге вашего проекта или в каталоге платформ.)
  2. Запустите команду, чтобы добавить Android в качестве платформы.

npx cap добавить android

Вышеупомянутая команда предназначена для ионного с конденсатором. Вы можете использовать обычную команду, если используете кордову.

  1. Откройте Android Studio и создайте APK. Этот APK должен работать должным образом.

поскольку эта тема возникает при поиске белого экрана, все вышеперечисленные решения у меня не сработали, но сработало следующее:

  1. удалить папку андроид
  2. удалить папку www
  3. запустить: ионный конденсатор добавить андроид
  4. запустить: ионную сборку (при этом будет создана папка www со всеми необходимыми файлами html и js)
  5. запустить: синхронизация ограничения npx
  6. запустить: открыть крышку npx andorid
  7. запустите проект на своем телефоне.

вот и все.

Другие вопросы по тегам