Вспышка между заставкой и последней загрузкой приложения для некоторых телефонов Android

У меня есть приложение PhoneGap/Sencha Touch, которое имеет три основных состояния при загрузке приложения: заставка, веб-просмотр загружен, но Sencha Touch загружается, а Sencha Touch полностью загружен.

На некоторых телефонах Android (например, на моем Kyocera Rise) все идет гладко. Вижу заставку, потом на deviceready успешно вызывается navigator.splashscreen.hide(). Жестко закодированный индикатор загрузки html / css, который у меня есть на index.html, отображается во время загрузки Sencha Touch, а затем, когда загружается код Sencha Touch, он показывает полностью загруженное приложение.

Однако на других телефонах (например, на моем Galaxy S3) все работает не так хорошо. Я вижу заставку, затем deviceready заставка скрыта. Однако запрограммированный индикатор загрузки на index.html не появляется. Все, что я вижу, это белый (или иногда черный) экран. Однако, когда код Sencha Touch полностью загружен, приложение успешно появляется.

Вот что я пробовал: - Удаление различных фрагментов кода. Полное удаление кода Sencha Touch позволяет избавиться от флэш-памяти и позволяет появиться жестко заданному индикатору загрузки на index.html.

  • Включение задержки в несколько секунд при срабатывании кода Sencha Touch. Не работает
  • Запуск оповещения javascript на deviceready избавляет от вспышки и позволяет появиться индикатору загрузки.
  • Замена индикатора загрузки только текстом: <body>loading</body>. Не работает.
  • Принуждение index.html к повторному рендерингу путем изменения цвета фона, а также переключения между display:none и display:block. Не работает.
  • Удаление слушателя deviceready и запуск navigator.splashscreen.hide() сразу после разметки <body> на index.html. Не работает.

Основываясь на этой информации, похоже, что это как-то связано с Sencha Touch, поскольку полное удаление кода Sencha Touch позволяет показывать индикатор загрузки. Возможно, это как-то связано с рендерингом, учитывая, что индикатор предупреждения также позволяет отображать индикатор загрузки. Однако это все, что у меня есть. Похоже, что другие люди сталкивались с подобными вещами, в основном на iOS и Blackberry. Я не нашел ни одного предложенного решения, которое я видел в другом месте, которое, кажется, решает мою проблему; во многом это просто тот факт, что раньше люди не могли скрыть заставку на устройстве.

Есть ли что-то, что мне здесь не хватает? Почему такое может происходить? Почему это происходит только на некоторых телефонах Android?


person Sergio Prado    schedule 09.02.2015    source источник
comment
Попробуйте переместить navigator.splashscreen.hide() в Application.launch метод. Кроме того, попробуйте свой код в эмуляторе Ripple, это может помочь понять причину проблемы: chrome.google.com/webstore/detail/ripple-emulator-beta/   -  person Baidaly    schedule 10.02.2015


Ответы (2)


Вы можете потратить довольно много времени, пытаясь усовершенствовать это. Мы знаем, что первый запуск приложения довольно важен для UX, однако (как вы правильно определили) огромное количество Android-устройств/версий ОС на самом деле делает его довольно сложной задачей. Мы нашли одно хорошее решение — скрыть приложение Sencha во время его загрузки, положиться на индикатор загрузки index.html, а затем отложить показ самого приложения Sencha.

Это определенно звучит так, как будто это может быть решением для вас, учитывая, что вы подтвердили, что не видите задержки между заставкой Android и загрузчиком index.html. В зависимости от того, как именно вы инициализируете свое приложение Sencha, вы, вероятно, захотите скрыть Ext.Viewport. Я бы начал с добавления Ext.Viewport.hide() в ваш метод инициализации. Если это решит вашу проблему, просто снова покажите окно просмотра с небольшой задержкой после Ext.application.Launch.

person OhmzTech    schedule 11.02.2015
comment
Спасибо за заметку! Итак, я реализовал это, и при первом запуске приложение работало отлично. Однако при каждом втором запуске не работает, хотя console.logs печатаются. Вы сталкивались с чем-то подобным? Вот код контроллера: Ext.define('BBApp.controller.Main', { extend: Ext.app.Controller, init: function(){ console.log(HIDING); Ext.Viewport.hide(); console.log (СКРЫТО); }, config: { refs: { Main: '#mainview', Register: '#register' }, history: null } }); - person Sergio Prado; 13.02.2015
comment
Попробуйте сделать область просмотра скрытой с самого начала, вместо вызова Ext.Viewport.hide(). Независимо от того, используете ли вы Ext.application() или Ext.setup(), оба могут принимать конфигурацию объекта для окна просмотра. Итак, попробуйте установить: viewport { hidden: true }. - person OhmzTech; 15.02.2015
comment
Большое спасибо за вашу помощь здесь! К сожалению, настройка viewport{hidden:true} в Ext.Application не работает, равно как и переход прямо в код Sencha Touch и настройка hidden:true в основном коде Viewport. Я чувствую, что мне, возможно, придется просто отпустить эту ошибку. Опубликовано на форумах Sencha Touch, возможно, кто-то из сотрудников Sencha знает, что происходит. - person Sergio Prado; 17.02.2015
comment
Извините, это не сработало, похоже, в SenchaFiddle все работало. Я соглашусь с вашим окончательным решением, поэтому я предварил свой первоначальный ответ. Мы имеем дело со вспышками экрана запуска Android, обходными путями и т. д. уже много лет. - person OhmzTech; 18.02.2015

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

используйте этот css:

body {
 height: 100%;
 background-color: #1985D0;// change this as per your splash screen
 }
person Amar1989    schedule 12.02.2015