`

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;
		}
	}
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics