怎么让webview在后台运行
1个回答
2016-11-15 · 百度知道合伙人官方认证企业
育知同创教育
1【专注:Python+人工智能|Java大数据|HTML5培训】 2【免费提供名师直播课堂、公开课及视频教程】 3【地址:北京市昌平区三旗百汇物美大卖场2层,微信公众号:yuzhitc】
向TA提问
关注
展开全部
根据每个页面访问的情况,初步确定问题出现的两个地方分别是有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,程序转入后台便不会占用那么多的资源了。
在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,程序转入后台便不会占用那么多的资源了。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询