最近两天一直在做一个网页连续测试的例子,循环统计各个页面的从向服务器发送数据------》服务器开始响应数据包---->服务器数据包响应完------->加载到手机 这三个时间段的统计!从而简单的统计网络加载页面的时间在哪些操作上消耗时间较多,为以后的改进做铺垫!
如果手机看不到数据,可以点击生成文件的按钮就可以在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;
}
}
}
分享到:
相关推荐
webView.setWebViewClient(new WebViewClient() { @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); view.removeTitle(); } }); ``` 通过这种方式,我们...
本文将详细讲解如何在Android Webview中调用摄像头进行二维码扫描,并结合ZXing(Zebra Crossing)解析包进行二维码的解析。 首先,让我们了解Android Webview的基本用法。Webview是Android SDK提供的一种视图组件...
WebView设置WebViewClient的方法 WebViewClient是WebView组件的一个回调接口,用于处理WebView中的各种事件,例如页面加载、链接点击、资源加载等。通过设置WebViewClient,我们可以在WebView中实现更加灵活的控制...
在Android开发中,Webview是一个非常重要的组件,它允许开发者在原生应用中嵌入网页内容,实现网页与原生应用的交互。本篇将详细讲解如何在Android Webview中实现滑动监听以及图片的放大缩小功能。 首先,我们要...
在Android开发中,WebView是一个非常重要的组件,它允许我们在应用程序内部加载和显示网页内容,无需跳转到外部浏览器。这个“Android webview加载网页.zip”文件可能包含了一个示例项目或者教程,帮助开发者理解...
在Android应用开发中,WebView是一个非常重要的组件,它允许开发者在应用程序内嵌入网页内容,实现类似浏览器的功能。本文将详细讲解如何在Android的WebView中播放视频,包括全屏播放的实现方法。以下是对该主题的...
webview.setWebViewClient(new WebViewClient() { @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); webview.evaluateJavascript(nightModeCss, new ...
在Android开发中,WebView是一个非常重要的组件,它允许我们在应用程序内部加载和显示网页内容,而无需离开应用。WebView不仅能够加载远程HTTP/HTTPS网址,还能处理本地HTML、CSS和JavaScript资源,极大地增强了应用...
- 初始化WebView,设置WebViewClient和WebChromeClient,以便处理页面加载和JavaScript交互。 2. **QQ登录接口** - 要实现QQ登录,你需要在腾讯开放平台上注册应用,获取AppID和AppKey。然后,在WebView中加载QQ...
在Android开发中,WebView是一个非常重要的组件,它允许我们在应用程序内部加载和显示网页内容。而WebView的缓存机制则是提高用户体验、减少网络流量的关键技术之一。本文将详细讲解如何利用WebView实现在线视频播放...
在Android开发中,WebView是一个非常重要的组件,它允许我们在原生应用中内嵌网页内容,实现混合开发。然而,开发者时常会遇到一些棘手的问题,其中之一便是“android webview 因iframe+target=“_blank”导致的...
`WebView`是Android SDK中的一个类,它可以加载URL,展示HTML页面,并通过`WebViewClient`和`WebChromeClient`两个接口与JavaScript进行通信。在创建`WebView`时,通常需要设置`WebSettings`,例如开启JavaScript...
在Android开发中,WebView是一个非常重要的组件,它可以加载和显示HTML内容,实现Web与原生应用的交互。...通过这样的方式,你可以在Android应用的WebView中无缝集成系统相机功能,为用户提供更丰富的体验。
Android WebView 加载网页是移动应用开发中的一项基本需求。然而,在加载 HTTPS 和 HTTP 网页时,WebView 可能会出现一些问题,本文将详细介绍这两个错误的解决方法。 错误一:加载 HTTPS 请求的网页时,WebView ...
在Android开发中,WebView是一个非常重要的组件,它允许我们在应用程序中内嵌网页内容。当我们需要在WebView中实现拨打电话的功能时,需要理解Android权限管理、WebView加载本地HTML以及JavaScript与Android原生代码...
在Android开发中,WebView是一个非常重要的组件,它允许我们在应用程序中内嵌网页内容,提供类似于浏览器的体验。本文将详细讲解如何在Android的WebView中加载网页,并获取URL参数值的方法。 首先,我们要明白...
总结来说,WebViewClient和WebChromeClient在Android WebView的使用中扮演着不可或缺的角色。理解它们各自的职责和用法,有助于我们更好地控制网页的加载过程,实现与网页内容的交互,从而提升应用的整体质量。
在Android应用开发中,WebView是一个非常重要的组件,它允许开发者在应用内展示网页内容,甚至与网页进行交互。本文将详细讲解如何在Android的WebView中实现打开本地相册选择图片,并将其上传到服务器的功能。 首先...
在三星GT-I9300I(android 4.3 在这款手机上测试的时候,拍照后有的时候在webview上显示不出来,不知道是不是重写了 mWebView.setWebViewClient(new WebViewClient(){ @Override public boolean ...