Android中webview监控页面卡死

原文地址为: Android中webview监控页面卡死

由于webview在加载页面过程中或者加载完成后,页面可能会出现卡顿或崩溃的情况,此时程序后台是感知不到的,需要通过程序手段监测出来。

因此采取页面上定时发送心跳到webview后端,后端通过监测心跳来判断页面有没有死掉的情况。

一、先编写java相关文件HeartJavaScriptFunction.java,用于向js提供调用的接口函数:

public interface HeartJavaScriptFunction {

void onJsFunctionCalled(int tag);
}

二、编写CrashMonitor.java,用来判断页面心跳:

import java.util.Date;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

public class CrashMonitor {
private ScheduledExecutorService executorService = null;
private long oldpos = 0;
private int pauseNum = 0;
private OnCrashedListener onCrashedListener;
public interface OnCrashedListener {
void onCrashed();
}
public void setOnCrashedListener(OnCrashedListener listener) {
onCrashedListener = listener;
}
public boolean isWorking(){
boolean res = false;
if(executorService != null){
res = true;
}
return res;
}
public void updateTimer(long pos){
oldpos = pos;
}
public void monitorPageCrashed(final int period){
executorService = Executors.newScheduledThreadPool(1);
executorService.scheduleAtFixedRate(
new Runnable() {
@Override
public void run() {
if(oldpos > 0 && (new Date().getTime() - oldpos) > 1 * 60 * 1000){
pauseNum ++;
}
if(pauseNum >= 3){
oldpos = 0;
executorService.shutdown();
//do something
if(onCrashedListener != null){
onCrashedListener.onCrashed();
}
return;
}
}
},0,period, TimeUnit.MILLISECONDS);
}
}

三、webview调用监听程序:

		mWebView.addJavascriptInterface(new HeartJavaScriptFunction() {

@Override
public void onJsFunctionCalled(int tag) {
// TODO Auto-generated method stub
if(crashMonitor != null){
crashMonitor.updateTimer(new Date().getTime());
if(!crashMonitor.isWorking()){
crashMonitor.monitorPageCrashed(tag);
}
}
}
}, "Android");
crashMonitor.setOnCrashedListener(new CrashMonitor.OnCrashedListener() {

@Override
public void onCrashed() {
// TODO Auto-generated method stub
//页面卡死了
}
});

四、页面通过js定时发送心跳:




转载请注明本文地址: Android中webview监控页面卡死

你可能感兴趣的:(Android中webview监控页面卡死)