android webview WebViewClient

最近两天一直在做一个网页连续测试的例子,循环统计各个页面的从向服务器发送数据------》服务器开始响应数据包---->服务器数据包响应完------->加载到手机  这三个时间段的统计!从而简单的统计网络加载页面的时间在哪些操作上消耗时间较多,为以后的改进做铺垫!
如果手机看不到数据,可以点击生成文件的按钮就可以在sd中看到txt 文件了.

注:
1.这只是个人理解做出来的demo,希望高手可以给点建议!
2.对android中内置的webkit 加载网页还不是很理解。有知者可以把具体过程告诉我。谢谢哈!

主要有两个类:
public class TestRecordNetTimeActivity extends Activity {

Button start, stop, report, getFile;
WebView web_content;
// String[] webs = {
// "http://wap.wirelessfj.com.cn/changecity.do;cacheClear=0.6904324889739418?cityid=591",
// "http://wap.szicity.com/index.php/xuan_news/",
// "http://wap.10086.cn/index.jsp", "http://m.58.com/",
// "http://sina.cn" };

// http://wap.mybj.gov.cn/

String[] webs = { "http://wap.wirelessfj.com.cn/",
"http://wap.szicity.com/index.php/city_xuan/index/",
"http://wap.10086.cn/index.jsp",
"http://wap.mybj.gov.cn/wap/IndexAction/indexPreLogin.action",
"http://3g.sina.com.cn/" };

int i = 0;
Boolean flag = true;

long end_timeMillions;

RecordDAO record = null;

private final static String PATH = "/sdcard/recordNet";
private final static String FILENAME = "/records.txt";

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
start = (Button) findViewById(R.id.start_btn);
stop = (Button) findViewById(R.id.stop_btn);
web_content = (WebView) findViewById(R.id.web_content);
web_content.clearCache(true);
// web_content.getSettings().setCacheMode();
record = new RecordDAO(this);
record.createDatabase();
report = (Button) findViewById(R.id.show_report);
getFile = (Button) findViewById(R.id.get_file);
/*
* report.setOnClickListener(new OnClickListener() {
*
* @Override public void onClick(View v) {
*
* Intent intent = new Intent(TestRecordNetTimeActivity.this,
* ShowItemActivity.class); startActivity(intent);
*
* } });
*/

start.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
web_content.setWebViewClient(new webContent());
web_content.loadUrl(webs[(i) % (webs.length)]);
}
});

stop.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {

Builder builder = new AlertDialog.Builder(
TestRecordNetTimeActivity.this);
builder.setMessage("确定停止统计?");
builder.setPositiveButton("确定",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which) {
System.exit(0);
}
});
builder.setNegativeButton("取消",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which) {
}
});
builder.show();
}
});

getFile.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
List<RecordNetTime> records = record.findAllInfo();
if (records != null && records.size() > 0) {

try {
if (Environment.MEDIA_MOUNTED.equals(Environment
.getExternalStorageState())) {
File path = new File(PATH);
File f = new File(PATH + FILENAME);

if (!path.exists()) {
path.mkdirs();
}

if (!f.exists()) {
// 创建文件夹
f.createNewFile();
}

OutputStreamWriter osw = new OutputStreamWriter(
new FileOutputStream(f));

StringBuilder sb = new StringBuilder();
sb.append("_id ")
.append("请求时间点 ")
.append("请求网络时间段 ")
.append("网络响应时间段 ")
.append("加载到手机时间段 ")
.append("加载的url ").append("\n");
for (RecordNetTime net : records) {
sb.append(net.getId() + " ")
.append(net.getRequest_time()
+ " ")
.append(net.getRequest_duration()
+ " ")
.append(net.getResponse_duration()
+ " ")
.append(net.getLoad_duration()
+ " ")
.append(net.getUrl() + " ")
.append("\n");
}
osw.write(sb.toString());
osw.close();
Toast.makeText(TestRecordNetTimeActivity.this,
"文件生成完毕", 3000).show();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} else {
Toast.makeText(TestRecordNetTimeActivity.this,
"没有数据,请点击开始统计", 3000).show();
}
}
});
}

@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
System.exit(0);

}

class webContent extends WebViewClient {
int ij = 0;
List<Long> lists = new ArrayList<Long>();

SharedPreferences sp = TestRecordNetTimeActivity.this
.getSharedPreferences("recordTime", 0);

@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
Editor edit = sp.edit();
long request_time = System.currentTimeMillis();
edit.putLong("request" + ij, request_time);
edit.putString("request_time",
FormateTimeUtil.fomateTime(request_time));
edit.commit();
System.out.println("ij的值是。。。。" + ij);
ij++;
System.out.println("我记得是那次的pageStar000t数据呢:"
+ sp.getLong("request0", 0l));
System.out.println("开始请求时间 " + request_time + "url " + url);
}

@Override
public void onLoadResource(WebView view, String url) {
// TODO Auto-generated method stub
super.onLoadResource(view, url);
System.out.println("服务端响应求请求时间是:" + System.currentTimeMillis()
+ " url :" + url);
lists.add(System.currentTimeMillis());
}

@Override
public void onPageFinished(WebView view, String url) {

System.out.println("页面加载结束" + System.currentTimeMillis() + "url:"
+ url);
sp = getSharedPreferences("recordTime", 0);

long request1 = sp.getLong("request0", 0l);
String request_time = sp.getString("request_time", "");

if (lists != null && lists.size() > 0) {
System.out.println("服务器响应时间开始" + lists.get(0));
System.out.println("服务器响应时间结束" + lists.get(lists.size() - 1));
long response_duration = lists.get(lists.size() - 1)
- lists.get(0);
System.out.println(lists.get(0) + " - " + request1 + " = "
+ (lists.get(0) - request1));
RecordNetTime recordTime = new RecordNetTime();
recordTime.setRequest_time(request_time);
recordTime.setRequest_duration(lists.get(0) - request1);
recordTime.setResponse_duration(response_duration);
recordTime.setLoad_duration(System.currentTimeMillis()
- lists.get(lists.size() - 1));
recordTime.setUrl(webs[(i) % (webs.length)]);
record.insertRecord(recordTime);
}
sp.edit().commit();
lists.removeAll(lists);
lists.clear();
// 依次循环进行
try {
System.out.println("停留2秒再打开新页面。。。。。。。。。。。。。。");
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
i++;
ij = 0;
// web_content.setWebViewClient(new webContent());
web_content.clearCache(true);
web_content.loadUrl(webs[(i) % (webs.length)]);
}
}


。。。。。。。。。。。。。sqlite3数据库建立
public class RecordDAO extends BaseDAO {

public RecordDAO(Context ctxt) {
super(ctxt);
}

// 添加一条记录
public long insertRecord(RecordNetTime record) {
long count = 0;

ContentValues cv = new ContentValues();
cv.put("request_time", record.getRequest_time());
cv.put("request_duration", record.getRequest_duration());
cv.put("response_duration", record.getResponse_duration());
cv.put("load_duration", record.getLoad_duration());
cv.put("url", record.getUrl());

count = super.sd.insert// 返回的是当前记录的编号
("statistics", null, cv);

return count;
}

public List<RecordNetTime> findAllInfo() {
List<RecordNetTime> records = null;
Cursor recordCursor = super.sd.query("statistics", new String[] {
"_id", "request_time", "request_duration", "response_duration",
"load_duration", "url" }, null, null, null, null, null);

int recordCount = recordCursor.getCount();
if (recordCount != 0 && recordCursor.moveToFirst()) {
records = new ArrayList<RecordNetTime>();
for (int i = 0; i < recordCount; i++) {
RecordNetTime recordTime = new RecordNetTime();
recordTime.setId(recordCursor.getInt(0));
recordTime.setRequest_time(recordCursor.getString(1));
recordTime.setRequest_duration(recordCursor.getLong(2));
recordTime.setResponse_duration(recordCursor.getLong(3));
recordTime.setLoad_duration(recordCursor.getLong(4));
recordTime.setUrl(recordCursor.getString(5));
records.add(recordTime);
recordCursor.moveToNext();
}
} else {
return null;
}
recordCursor.close();
return records;
}
}


。。。。。。。。。。。base类
public class BaseDAO {
Context ctxt = null;

// 当前创建Sqlite3 数据库
SQLiteDatabase sd = null;

int versionDatabase = 1;

// 建库
class MyDataHelper extends SQLiteOpenHelper {

String sql = "create table statistics (_id integer primary key autoincrement,request_time text not null, "
+ "request_duration text not null,response_duration text not null,load_duration text not null,"
+ "url text not null);";

public MyDataHelper(Context context, String name,// 数据库物理文件的名字
// usernewer.db
CursorFactory factory, int version) {// version:是否要修改物理数据库中表的结构
super(context, name, factory, version);
// TODO Auto-generated constructor stub
}

// 执行Create table语句建立物理数据库
// 文件中保存的表.
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(sql);
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, // 1
int newVersion) { // 2
// 因为表结构发生改变
// 删表
db.execSQL("drop table if exists statistics");

db.execSQL(sql);
// 重建表
onCreate(db);
}

}

public BaseDAO(Context ctxt) {
this.ctxt = ctxt;
}

// public Connection getConnection()
public void createDatabase() {

MyDataHelper myDataHelper = new MyDataHelper(this.ctxt, "record.db",
null, 2);// -->onCreate()
// 1-->2 -->onUpgrade()-->升级

try {
// Sqlite3数据库正常
// 存储空间容量还有多
// 允许应用程序向数据库中添加数据
sd = myDataHelper.getWritableDatabase();
} catch (Exception e) {
e.printStackTrace();
// 允许应用程序读取数据库中数据,
// 但不允许进行修改和添加
sd = myDataHelper.getReadableDatabase();
}
}

// public void closeConnection()
public void close() {
if (sd != null) {
sd.close();
sd = null;
}
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值