安卓手机怎么如何解决安卓卡顿卡顿反应慢的问题

72300人阅读
Android(142)
作者同类文章X
WebView(8)
作者同类文章X
如有转载,请声明出处: 时之沙:&Android WebView常见问题解决方案汇总:就目前而言,如何应对版本的频繁更新呢,又如何灵活多变地展示我们的界面呢,这又涉及到了web app与native app之间孰优孰劣的争论. 于是乎,一种混合型的app诞生了,灵活多变的部分,如淘宝商城首页的活动页面,一集凡客诚品中我们都可以见到web 页面与native页面的混合,既利用了web app的灵活易更新,也借助了native app本身的效率.当然,就会用到webview这样的一个控件,这里,我把自己使用过程中遇到的一些问题整理下来.首先上张图对WebView进行一个基本的回顾:以上思维导图原文件下载地址:然后看一下具体的问题及解决方案:1.为WebView自定义错误显示界面:覆写WebViewClient中的onReceivedError()方法: /**
* 显示自定义错误提示页面,用一个View覆盖在WebView
protected void showErrorPage() {
LinearLayout webParentView = (LinearLayout)mWebView.getParent();
initErrorPage();
while (webParentView.getChildCount() & 1) {
webParentView.removeViewAt(0);
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT);
webParentView.addView(mErrorView, 0, lp);
mIsErrorPage =
protected void hideErrorPage() {
LinearLayout webParentView = (LinearLayout)mWebView.getParent();
mIsErrorPage =
while (webParentView.getChildCount() & 1) {
webParentView.removeViewAt(0);
protected void initErrorPage() {
if (mErrorView == null) {
mErrorView = View.inflate(this, R.layout.online_error, null);
Button button = (Button)mErrorView.findViewById(R.id.online_error_btn_retry);
button.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
mWebView.reload();
mErrorView.setOnClickListener(null);
}@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
mErrorView.setVisibility(View.VISIBLE);
super.onReceivedError(view, errorCode, description, failingUrl);
2.WebView cookies清理:CookieSyncManager.createInstance(this);
CookieSyncManager.getInstance().startSync();
CookieManager.getInstance().removeSessionCookie(); 3.清理cache 和历史记录:webView.clearCache(true);
webView.clearHistory();4.判断WebView是否已经滚动到页面底端:getScrollY()方法返回的是当前可见区域的顶端距整个页面顶端的距离,也就是当前内容滚动的距离.
getHeight()或者getBottom()方法都返回当前WebView 这个容器的高度
getContentHeight 返回的是整个html 的高度,但并不等同于当前整个页面的高度,因为WebView 有缩放功能, 所以当前整个页面的高度实际上应该是原始html 的高度再乘上缩放比例. 因此,更正后的结果,准确的判断方法应该是:
if(WebView.getContentHeight*WebView.getScale() == (webview.getHeight()+WebView.getScrollY())){ //已经处于底端 } 5.URL拦截:Android WebView是拦截不到页面内的fragment跳转的。但是url跳转的话,又会引起页面刷新,H5页面的体验又下降了。只能给WebView注入JS方法了。&6.处理WebView中的非超链接请求(如Ajax请求): &有时候需要加上请求头,但是非超链接的请求,没有办法再shouldOverrinding中拦截并用webView.loadUrl(String url,HashMap headers)方法添加请求头& 目前用了一个临时的办法解决:首先需要在url中加特殊标记/协议, 如在onWebViewResource方法中拦截对应的请求,然后将要添加的请求头,以get形式拼接到url末尾在shouldInterceptRequest()方法中,可以拦截到所有的网页中资源请求,比如加载JS,图片以及Ajax请求等等Ex:@SuppressLint(&NewApi&)
public WebResourceResponse shouldInterceptRequest(WebView view,String url) {
// 非超链接(如Ajax)请求无法直接添加请求头,现拼接到url末尾,这里拼接一个imei作为示例
String ajaxUrl =
// 如标识:req=ajax
if (url.contains(&req=ajax&)) {
ajaxUrl += &&imei=& +
return super.shouldInterceptRequest(view, ajaxUrl);
}7.在页面中先显示图片:@Override
public void onLoadResource(WebView view, String url) {
mEventListener.onWebViewEvent(CustomWebView.this, OnWebViewEventListener.EVENT_ON_LOAD_RESOURCE, url);
if (url.indexOf(&.jpg&) & 0) {
hideProgress(); //请求图片时即显示页面
mEventListener.onWebViewEvent(CustomWebView.this, OnWebViewEventListener.EVENT_ON_HIDE_PROGRESS, view.getUrl());
super.onLoadResource(view, url);
}&8.屏蔽掉长按事件 因为webview长按时将会调用系统的复制控件:&& &&
mWebView.setOnLongClickListener(new OnLongClickListener() {
public boolean onLongClick(View v) {
});9.在WebView加入 flash支持:String temp = &&html&&body bgcolor=\&& + &black&
+ &\&& &br/&&embed src=\&& + url + &\& width=\&& + &100%&
+ &\& height=\&& + &90%& + &\& scale=\&& + &noscale&
+ &\& type=\&& + &application/x-shockwave-flash&
+ &\&& &/embed&&/body&&/html&&;
String mimeType = &text/html&;
String encoding = &utf-8&;
web.loadDataWithBaseURL(&null&, temp, mimeType, encoding, &&);10.WebView保留缩放功能但隐藏缩放控件:mWebView.getSettings().setSupportZoom(true);
mWebView.getSettings().setBuiltInZoomControls(true);
if (DeviceUtils.hasHoneycomb())
mWebView.getSettings().setDisplayZoomControls(false);注意:setDisplayZoomControls是在Android 3.0中新增的API.这些是目前我整理出来的一些注意事项和问题解决方案,也欢迎大家多提一些关于webview的问题,如果有合适的解决方案,我会直接更新到这篇文章.8月份更新:11.WebView 在Android4.4的手机上onPageFinished()回调会多调用一次(具体原因待追查)需要尽量避免在onPageFinished()中做业务操作,否则会导致重复调用,还有可能会引起逻辑上的错误.12.需要通过获取Web页中的title用来设置自己界面中的title及相关问题:需要给WebView设置 WebChromeClient,并在onReceiveTitle()回调中获取WebChromeClient webChromeClient = new WebChromeClient() {
public void onReceivedTitle(WebView view, String title) {
super.onReceivedTitle(view, title);
txtTitle.setText(title);
但是发现在小米3的手机上,当通过webview.goBack()回退的时候,并没有触发onReceiveTitle(),这样会导致标题仍然是之前子页面的标题,没有切换回来.这里可以分两种情况去处理:(1) 可以确定webview中子页面只有二级页面,没有更深的层次,这里只需要判断当前页面是否为初始的主页面,可以goBack的话,只要将标题设置回来即可.(2)webview中可能有多级页面或者以后可能增加多级页面,这种情况处理起来要复杂一些:&&& 因为正常顺序加载的情况onReceiveTitle是一定会触发的,所以就需要自己来维护webview& loading的一个url栈及url与title的映射关系&& 那么就需要一个ArrayList来保持加载过的url,一个HashMap保存url及对应的title.&& 正常顺序加载时,将url和对应的title保存起来,webview回退时,移除当前url并取出将要回退到的web 页的url,找到对应的title进行设置即可.这里还要说一点,当加载出错的时候,比如无网络,这时onReceiveTitle中获取的标题为 找不到该网页,因此建议当触发onReceiveError时,不要使用获取到的title.13.WebView因addJavaScriptInterface()引起的安全问题.&&& 这个问题主要是因为会有恶意的js代码注入,尤其是在已经获取root权限的手机上,一些恶意程序可能会利用该漏洞安装或者卸载应用.关于详细的情况可以参考下面这篇文章:.& &还有一个开源项目可以参考:&, 该项目利用onJsPrompt() 替代了addJavaScriptInterface(),(解决方案类似上述参考的博客)同时增加了异步回调,很好地解决了webview &js注入的安全问题.10月份更新:14.WebView页面中播放了音频,退出Activity后音频仍然在播放需要在Activity的onDestory()中调用webView.destroy();但是直接调用可能会引起如下错误:10-10 15:01:11.402: E/ViewRootImpl(7502): sendUserActionEvent() mView == null
10-10 15:01:26.818: E/webview(7502): java.lang.Throwable: Error: WebView.destroy() called while still attached!
10-10 15:01:26.818: E/webview(7502):
at android.webkit.WebViewClassic.destroy(WebViewClassic.java:4142)
10-10 15:01:26.818: E/webview(7502):
at android.webkit.WebView.destroy(WebView.java:707)
10-10 15:01:26.818: E/webview(7502):
at com.didi.taxi.ui.webview.OperatingWebViewActivity.onDestroy(OperatingWebViewActivity.java:236)
10-10 15:01:26.818: E/webview(7502):
at android.app.Activity.performDestroy(Activity.java:5543)
10-10 15:01:26.818: E/webview(7502):
at android.app.Instrumentation.callActivityOnDestroy(Instrumentation.java:1134)
10-10 15:01:26.818: E/webview(7502):
at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3619)
10-10 15:01:26.818: E/webview(7502):
at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:3654)
10-10 15:01:26.818: E/webview(7502):
at android.app.ActivityThread.access$1300(ActivityThread.java:159)
10-10 15:01:26.818: E/webview(7502):
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1369)
10-10 15:01:26.818: E/webview(7502):
at android.os.Handler.dispatchMessage(Handler.java:99)
10-10 15:01:26.818: E/webview(7502):
at android.os.Looper.loop(Looper.java:137)
10-10 15:01:26.818: E/webview(7502):
at android.app.ActivityThread.main(ActivityThread.java:5419)
10-10 15:01:26.818: E/webview(7502):
at java.lang.reflect.Method.invokeNative(Native Method)
10-10 15:01:26.818: E/webview(7502):
at java.lang.reflect.Method.invoke(Method.java:525)
10-10 15:01:26.818: E/webview(7502):
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1187)
10-10 15:01:26.818: E/webview(7502):
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
10-10 15:01:26.818: E/webview(7502):
at dalvik.system.NativeStart.main(Native Method)如上所示,webview调用destory时,webview仍绑定在Activity上.这是由于自定义webview构建时传入了该Activity的context对象,因此需要先从父容器中移除webview,然后再销毁webview:rootLayout.removeView(webView);
webView.destroy();15. WebView长按自定义菜单,实现复制分享相关功能&这个功能首先可以从两方面完成:& (1) 在js中完成:& & 处理android.selection.longTouch这里推荐一个开源项目进行参考,:& &(2) 安卓层处理:& & &首先使用OnTouchListener实现长按实现监听,然后实现WebView的Context menu,最后调用webview中的emulateShiftHeld(),为了适配安卓不同版本,最好使用反射方式调用.
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1681987次
积分:15821
积分:15821
排名:第322名
原创:197篇
转载:21篇
译文:14篇
评论:826条
微博: Shawn_Tony
(1)(1)(1)(2)(1)(1)(7)(8)(3)(8)(11)(13)(4)(2)(4)(11)(7)(23)(24)(54)(21)(9)(12)(2)(1)(1)专业的QQ下载站 本站非腾讯QQ官方网站
本类阅读排行
12345678910
热点图文新闻
安卓手机越来越卡怎么办 如何让你的安卓轻松提速50%
导读:为什么你的手机会变得越来越卡?反应会越来越慢?相信这是很多安卓手机用户普遍存在的一个疑问,不仅手机反应慢,还容易发热、启动应用程序卡顿等现象究竟该如何解决呢?
为什么你的手机会变得越来越卡?反应会越来越慢?相信这是很多安卓手机用户普遍存在的一个疑问,不仅手机反应慢,还容易发热、启动应用程序卡顿等现象究竟该如何解决呢?有时候,你发现通知栏有一条消息,然后就去点击它,那条通知消息竟然自动变成软件下载了,而且连停止按钮都没有,根本停不下来。还有一些App在桌面都不生成图标,直接在后台伪装成系统进程运行,为的就是搜集用户位置、电话号码、私密短信等隐私信息。有些厂商为了谋取暴利,还在正常的App里面加入广告代码,有的甚至是故意造出流氓软件吸费扣费,甚至在后台搜集用户的隐私信息。试想,你的手机怎么可能不卡?最后也是大家最关心的~怎么解决。。。如何让你的安卓轻松提速50%提速第一步:屏蔽通知栏无用消息推送,解除占用系统的资源,轻松提速&大量消息推送的进程会占用系统的资源,从而引起收集卡顿,而且由于消息推送的联网需求,垃圾广告类的消息还会消耗流量,间接造成偷跑流量的现象,浪费我们的银子。屏蔽无用通知,就可以有效提高手机运行速度提速第二步:卸载无用预装,提高手机运行速度&一些互联网公司通过手机经销商把恶意程序软件预装进手机,不仅删不了,更恐怖的是,还会拖慢手机运行速度。这些程序悄悄地把手机中的信息发送到这些公司的服务器。不仅是山寨手机,连行货都无法幸免。莫名扣费、窃取隐私,手机用户发现无缘无故就被扣掉很多钱。提速第三步:自动净化应用,省电、提速一石二鸟大家可以根据自己的使用习惯设置自启可是否自动回收。自动回收可以自动净化一些耗电进程,阻止应用自启,可以防止频繁自启占用手机资源拖慢手机速度。
作者:qqtn强柔
阅读本文后您有什么感想? 已有 0 人给出评价!新秦时明月安卓放技能卡顿怎么办 关于安卓卡顿的问题
来源:&&&& 时间: &&&& 作者:linweicheng&&&& 访问量:545&&&&
大小:186M
版本:1.0.2.0
  手游中,新版本更新之后,其流畅度出现了问题,这个问题主要在手机上,很多玩家反映安卓手机用技能的时候就会,而且是卡的爆表,那么怎么游戏很卡怎么办呢?有没有修复了呢?让小编来给玩家们解答一下吧!
& & & &新秦时明月手游公测琵琶网礼包版下载地址:
  技能卡顿问题:
  最近各种论坛和贴吧可是充斥着各种反应安卓新版本更新之后卡顿的问题,这个应该是官方的BUG,目前只有官方的手段才能解决。
  玩家们在英雄放技能的时候,就会立刻开始变卡,而且卡的的飞起,很多的玩家都表示玩不了了,甚至有些玩家还开始脱坑了。
  那么玩家们的好消息来了,官方已经在着手解决技能卡顿的问题了。
  根据小道消息反映,官方将在近期解决这个卡顿的问题,有小部分的玩家已经参与了BUG的修复,还获得大量补偿,所以玩家们大可放心,很快就可以解决卡顿的问题了。
  至于脱坑的玩家们,回归的时刻到了,IOS的玩家们也不用担心悲剧重演,既然安卓快要解决了,IOS就不会出现问题了。
  以上就是新秦时明月手游中安卓卡顿问题详解,安卓技能释放卡顿确实是不该出现的问题,不过官方已经在重点解决这个BUG 了,玩家们大可放心。
新秦时明月安卓相关文章推荐
微信扫一扫-礼包攻略通通到手
微信扫一扫关注琵琶网公众号:
1.扫描二维码或搜索微信号,关注“琵琶网手游”;
2.回复“新秦时明月”,即可查看新秦时明月最新礼包和资讯;
还没关注的小伙伴,赶紧扫一扫吧~
手机浏览器扫描-免费领取礼包
扫描二维码下载大手礼包APP:
1.搜索“新秦时明月”,免费领取新秦时明月最新礼包;
2.订阅“新秦时明月”,随时掌握礼包动向;
3.许愿“新秦时明月”礼包,我们帮您实现;
4.大手礼包下载:
1487252人下载
扫描安装到手机
1439635人下载
扫描安装到手机
55767人下载
扫描安装到手机
39279人下载
扫描安装到手机
893482人下载
扫描安装到手机
1131247人下载
扫描安装到手机
712898人下载
扫描安装到手机
809794人下载
扫描安装到手机
91774人下载
扫描安装到手机
839090人下载
扫描安装到手机
133583人下载
扫描安装到手机
373735人下载
扫描安装到手机
134225人下载
扫描安装到手机
252572人下载
扫描安装到手机
132250人下载
扫描安装到手机
630909人下载
扫描安装到手机
63816人下载
扫描安装到手机
870121人下载
扫描安装到手机
1487445人下载过
1439760人下载过
893539人下载过
809817人下载过
712912人下载过
658217人下载过
631374人下载过
537385人下载过
91796人下载过
48173人下载过
新秦时明月 - 游戏下载
安卓版下载:
苹果版下载:
温馨提示:如果苹果正版点击没反应,请用手机扫描下载~除了恢复出厂设置外,安卓手机还有别的方法解决长时间使用后的卡顿问题吗?
我用的小米2a用了大概一年多后,最近发现特别卡,恢复出厂设置以后,好了很多。但是很多资料也不见了,想问问除了恢复出厂外还有什么好的方法解决安卓手机的这个缺点。
按投票排序

我要回帖

更多关于 如何解决安卓卡顿 的文章

 

随机推荐