Android开发中使用WebView后程序进入后台依旧占用CPU的解决

本文详细介绍了如何通过自定义WebView控件解决Android应用在后台运行时导致的高CPU和内存占用问题。通过在onPause()和onResume()方法中控制WebView的生命周期,有效地减少了资源消耗。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

开发的程序在论坛反馈板块下,用户抱怨使用以后,手机发热量增加,耗电量也随之增加,在新版本发布之前,被要求排查程序源码中可能的原因。

根据每个页面访问的情况,初步确定问题出现的两个地方分别是有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);// stop flash
} catch (Exception e) {
}
this.pauseTimers();
this.is_gone = true;
} else if (visibility == View.VISIBLE) {
try {
WebView.class.getMethod("onResume").invoke(this);// resume flash
} catch (Exception e) {
}
this.resumeTimers();
this.is_gone = false;
}
}
@Override
protected void onDetachedFromWindow() {
if (this.is_gone) {
try {
this.destroy();
} catch (Exception e) {
}
}
}
}

以后在使用的时候只要都是用这个自定义的WebView,程序转入后台便不会占用那么多的资源了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值