CQM*_*CQM 168 performance android webview
我android webviews很慢.这是从手机到3.0+平板电脑的各种规格
我知道,网页视图都应该是"有限的",但我看到的网络应用与必须使用的各种手机的差距做CSS3和JQuery巫术,他们跑就好了,并迅速
所以我错过了什么,有什么myWebview.SPEEDHACK(1)我可以用来加快速度吗?
另外,有时我的webview的内容只是不加载,而不是慢慢加载,它只是不会加载.我正在测试的资产存储在本地,没有错误.
pec*_*eps 128
这取决于正在加载的Web应用程序.尝试以下一些方法:
设置更高的渲染优先级(不推荐使用API 18+):
webview.getSettings().setRenderPriority(RenderPriority.HIGH);
Run Code Online (Sandbox Code Playgroud)
启用/禁用硬件加速:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
// chromium, enable hardware acceleration
webView.setLayerType(View.LAYER_TYPE_HARDWARE, null);
} else {
// older android version, disable hardware acceleration
webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
}
Run Code Online (Sandbox Code Playgroud)
禁用缓存(如果您的内容有问题):
webview.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
Run Code Online (Sandbox Code Playgroud)
小智 52
android:hardwareAccelerated="true"在清单中添加它是唯一能够显着改善性能的东西
更多信息:http: //developer.android.com/guide/topics/manifest/application-element.html#hwaccel
Ena*_*Ena 36
我们的解决方案恰恰相反.我们使用以下代码仅禁用WebView上的硬件加速(而不是清单中的整个应用程序):
if (Build.VERSION.SDK_INT >= 11){
webview.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
}
Run Code Online (Sandbox Code Playgroud)
CSS3动画现在更流畅了.我们使用的是Android 4.0.
有关详情,请访问:https://code.google.com/p/android/issues/detail?id = 17352
小智 13
我认为以下效果最好:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
webView.setLayerType(View.LAYER_TYPE_HARDWARE, null);
} else {
webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
}
Run Code Online (Sandbox Code Playgroud)
Android 19为WebView提供了Chromium引擎.我猜它在硬件加速方面效果更好.
小智 9
我遇到了同样的问题,我不得不解决这个问题.我尝试了这些解决方案,但最后的表现,至少对于滚动来说根本没有改进.所以这里是我所做的工作,以及为什么它对我有用的解释.
如果你有机会通过创建一个"MiWebView"类,覆盖"onTouchEvent"方法并至少打印每个拖拽事件发生的时间来探索拖拽事件,你会看到它们是分开的及时(下至)9ms之遥.事件之间的时间非常短暂.
看一下WebView源代码,然后看一下onTouchEvent函数.它不可能在不到9ms的时间内被处理器处理(继续做梦!!!).这就是为什么你经常看到"因为我们正在等待WebCore对降落的回应而错过拖累".信息.代码无法按时处理.
怎么解决?首先,你不能重写onTouchEvent代码来改进它,它太多了.但是,你可以"嘲笑它"以限制拖动动作的事件率,比方说40ms或50ms.(这取决于处理器).
所有触摸事件都是这样的:ACTION_DOWN - > ACTION_MOVE ...... ACTION_MOVE - > ACTION_UP.所以我们需要保持DOWN和UP运动并过滤MOVE率(这些都是坏人).
这是一种方法(你可以添加更多的事件类型,如2指触摸,我感兴趣的是这里的单指滚动).
import android.content.Context;
import android.view.MotionEvent;
import android.webkit.WebView;
public class MyWebView extends WebView{
public MyWebView(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
private long lastMoveEventTime = -1;
private int eventTimeInterval = 40;
@Override
public boolean onTouchEvent(MotionEvent ev) {
long eventTime = ev.getEventTime();
int action = ev.getAction();
switch (action){
case MotionEvent.ACTION_MOVE: {
if ((eventTime - lastMoveEventTime) > eventTimeInterval){
lastMoveEventTime = eventTime;
return super.onTouchEvent(ev);
}
break;
}
case MotionEvent.ACTION_DOWN:
case MotionEvent.ACTION_UP: {
return super.onTouchEvent(ev);
}
}
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
当然使用此类而不是WebView,您将看到滚动时的差异.
这只是解决方案的一种方法,但在使用WebView时由于屏幕触摸而导致的所有延迟情况仍未完全实现.然而,这是我发现的最佳解决方案,至少对我的具体需求而言.
小智 8
我尝试了所有提议来修复我的phonegap应用中的渲染性能问题.但没有任何结果.
最后,经过一整天的搜索,我成功了.我在AndroidManifest的标签(不是标签)中设置
<application android:hardwareAccelerated="false" ...
Run Code Online (Sandbox Code Playgroud)
现在,该应用程序的行为方式与我的webbrowser相同.似乎,如果硬件加速并不总是最好的功能......
我遇到的详细问题:https://stackoverflow.com/a/24467920/3595386
这些答案都对我没有帮助。
最后,我找到了原因和解决方案。原因是很多CSS3过滤器(过滤器,-webkit-filter)。
解
我在网页脚本中添加了对WebView的检测,以便将类“ lowquality”添加到HTML正文中。顺便说一句。您可以通过在WebView设置中设置用户代理来轻松跟踪WebView。然后我创建了新的CSS规则
body.lowquality * { filter: none !important; }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
145784 次 |
| 最近记录: |