我有一个 PhoneGap/Sencha Touch 应用程序,它在应用程序加载时具有三种基本状态:启动屏幕、加载 web 视图但 Sencha Touch 正在加载,以及 Sencha Touch 已完全加载。
在一些 Android 手机上(比如我的 Kyocera Rise),一切都很顺利。我看到启动画面,然后打开deviceready
,navigator.splashscreen.hide()
被成功调用。我在index.html
加载 Sencha Touch 时显示的 html/css 硬编码加载指示器,然后在加载 Sencha Touch 代码时显示完全加载的应用程序。
然而,在其他手机(比如我的 Galaxy S3)上,事情就不那么好了。我看到启动画面,然后启动画面deviceready
被隐藏。index.html
但是,不会出现硬编码加载指示器。我所看到的只是一个白色(有时是黑色)屏幕。但是,当 Sencha Touch 代码完全加载时,该应用程序确实会成功显示。
这是我尝试过的: - 删除各种代码。完全删除 Sencha Touch 代码确实摆脱了 flash 并让硬编码的加载指示器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 和黑莓上。我还没有找到任何我在其他地方看到的似乎可以解决我的问题的建议解决方案;很多原因是人们过去无法在 deviceready 上隐藏启动画面。
我在这里缺少什么吗?为什么会发生这种事情?为什么它只会发生在某些 Android 手机上?