开发的程序在论坛反馈板块下,用户抱怨使用以后,手机发热量增加,耗电量也随之增加,在新版本发布之前,被要求排查程序源码中可能的原因。
根据每个页面访问的情况,初步确定问题出现的两个地方分别是有admob的列表页、使用webview显示网页的页面;初步分析带有admob的列表页可能的原因是进入后台以后,虽然onPause()处理了事件,但是admob还是依旧运行中,所以出现了转入后台依旧高CPU消耗的问题。这里尝试了解决方案是在onPause()中销毁了admob的广告,当onResume()时重新获取广告。测试这里问题解决。
在webview中的问题就麻烦了许多,开始测试时,试用webview的stopLoading(),发现完全没有达到预想的效果,由于请求的是服务器端的网页展示,考虑会不会是页面的问题,最终这个原因也被排除。后来经过多次尝试,发现在DDMS中查看进程时发现,每当启动了webview以后,WebViewCoreThread便会一直运行,观察这个线程的运行时间,可以很明显的看出来不管程序是在前台运行状态还是后台状态,它都在正常运行,导致了CPU和内存占用居高不下。
既然找到了源头,接下来便是寻求处理方法。终于找打一个可以解决的办法,经测试该方法在2.2, 2.3, 4.1.2真机上效果是可以的,现整理一下。
我们需要自己写一个WebView控件,继承系统的WebView:
package
com.ilovn.app.test;
import
android.content.Context;
import
android.util.AttributeSet;
import
android.view.View;
import
android.webkit.WebView;
/**
*
自定义的WebView
*
*
@author zhaoyong
*
*/
public
class
FastWebView extends
WebView {
private
boolean
is_gone = false ;
public
FastWebView(Context context) {
super (context);
}
public
FastWebView(Context context, AttributeSet attrs) {
super (context,
attrs);
}
@Override
protected
void
onWindowVisibilityChanged( int
visibility) {
super .onWindowVisibilityChanged(visibility);
if
(visibility == View.GONE) {
try
{
WebView. class .getMethod( "onPause" ).invoke( this );
}
catch
(Exception e) {
}
this .pauseTimers();
this .is_gone
= true ;
}
else
if
(visibility == View.VISIBLE) {
try
{
WebView. class .getMethod( "onResume" ).invoke( this );
}
catch
(Exception e) {
}
this .resumeTimers();
this .is_gone
= false ;
}
}
@Override
protected
void
onDetachedFromWindow() {
if
( this .is_gone)
{
try
{
this .destroy();
}
catch
(Exception e) {
}
}
}
}
|
以后在使用的时候只要都是用这个自定义的WebView,程序转入后台便不会占用那么多的资源了。
分享到:
相关推荐
android开发中WebView的使用 WebView是个好东西,作用相当于一个迷你的浏览器,采用Webkit内核,因此完美支持html,javascript,css等。有时候,我们完全可以把UI甚至数据处理都交给WebView,配合PHP等服务端程序,...
android开发中WebView的使用.pdf
android--开发中WebView的使用.docx
Android Studio中进行简单的WebView构建浏览器开发1》和《Android开发】Android Studio中进行简单的WebView构建浏览器开发2》进行使用,实现了基本的浏览器功能:包括:输入网址,点击搜索进入该网站;输入搜索内容...
第一次尝试用Android Studio 开发的WebView 框架源码;仅供大家学习参考。
android使用webView实现java程序与js脚本的相互调用,
android--开发中WebView的使用.pdf
Android APP使用WebView调用H5页面完成摄像头扫描二维码 项目使用Android Studio,打开项目可以直接运行,用过的都说好:)
本案例演示webview和crosswalk支持webRTC的对比情况及基本使用方法,详情参见博客http://blog.csdn.net/nmyangmo/article/details/73105712
Android-X5WebView基本封装和使用 通过OkHttp拦截器、自定义CookieJar有效完成客户端与H5端的Cookie同步管理 监听WebView的加载进度 滚动条的设置(隐藏或者显示,内侧显示还是外侧显示) 优化X5WebView的预加载问题...
Android webview 内存泄露的解决方法 最近在activity嵌套webview显示大量图文发现APP内存一直在涨,没法释放内存,查了很多资料,大概是webview的一个BUG,引用了activity导致内存泄漏,所以就尝试传递...
Android8.0以下手机自带的android-system-webview版本过低使用
Android 基于x5Webview 浏览文件 office文档 已测试Android11 功能实现
android不使用webview与js交互
android解析pdf使用webview展示,放在src/main/assets目录下
在android的webview中实现websocket通信
Android中webview使用js与java交互
android 8.0 webview 拍照、预览、二维码扫描比较完整的例子,对于权限检查控制,有比较完善的提示写法。可以下载后,直接在android studid上运行,编译版本和target版本均是SDK android 8.0,最低版本设置成了...
主要介绍了Android中的webview监听每次URL变化实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
。。。。。。。Android webview QQ一键登录并向后台返回参数