我正在Android上通过PhoneGap和内置浏览器运行同样的Web应用程序。该应用程序在内置浏览器上运行良好,但在PhoneGap下则明显变慢。甚至在页面上进行基本滚动也会出现卡顿。
总的来说,我可能做错了什么?我认为PhoneGap只是使用与普通浏览器应用程序相同的WebKit渲染器,那么为什么相同的HTML和JavaScript在PhoneGap中运行速度会慢得多呢?
P.S. 这个问题之前已经有人提问过,但由于措辞不当,我认为原始问题被误解了。
我正在Android上通过PhoneGap和内置浏览器运行同样的Web应用程序。该应用程序在内置浏览器上运行良好,但在PhoneGap下则明显变慢。甚至在页面上进行基本滚动也会出现卡顿。
总的来说,我可能做错了什么?我认为PhoneGap只是使用与普通浏览器应用程序相同的WebKit渲染器,那么为什么相同的HTML和JavaScript在PhoneGap中运行速度会慢得多呢?
P.S. 这个问题之前已经有人提问过,但由于措辞不当,我认为原始问题被误解了。
我可能无意中找到了这个问题的答案。原来我正在开发的应用程序在AndroidManifest.xml
中设置了一个非常低的android:targetSdkVersion
值 (即我的目标 Android 版本大约是 2.2)。将其增加到14
(Android 4.0)似乎极大地提高了 PhoneGap 的性能,至少在运行 ICS 或 Jelly Bean 的新版本 Android 设备上。
设置较低的targetSdkVersion
似乎会禁用某些较新版本 Android 引入的性能改进。
因此,如果你想在 PhoneGap 中获得显著的性能提升,请确保你的targetSdkVersion
与你测试的手机所支持的最大 SDK 版本匹配。
我不太了解PhoneGap,但您可以尝试以下方法:
android:hardwareAccelerated="true"
webview.getSettings().setRenderPriority(RenderPriority.HIGH);
和webview.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
与直觉相反,您可能需要关闭Webview的硬件加速。自Android 4.0.4以来,硬件加速对画布和其他重绘事件没有任何作用,而实际上会为这些事件释放CPU资源。
尝试在应用程序Java文件中添加以下代码:
super.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
同时在清单文件中设置android:hardwareAccelerated="false"。
我经历了完全相同的事情!之前我使用Android 3.x进行测试。一旦我升级到4.4.2,我的画布就变得非常缓慢!查看渲染时间轴,我可以看到许多光栅化调用超过100毫秒,并将我的FPS降至约8!android:hardwareAccelerated="false"解决了我的问题。是否有一种方法可以根据Android版本设置hardwareAccelerated="true"?