Я создаю приложение SpeedTest в android. Одной из частей этого приложения является тест просмотра, ie., Загрузка различных веб-страниц в веб-представление и вычисление времени и рейтинга производительности. Я разобрался с частью времени. Но для того, чтобы рассчитать PR, мне нужно знать данные, используемые при загрузке каждого сайта. Я разобрался с частью времени. Любые идеи о том, как рассчитать используемые данные? В настоящее время я использую getUidRxBytes (), но это не работает, поскольку он дает мне весь сетевой трафик c с момента загрузки.
Это код
public class BrowsingTestFragment extends Fragment {
View rootView;
WebView myWebView;
Button start;
boolean startTesting;
String[] mStrings;
private int i = 0;
long last_page_start;
long now;
long exactTime;
TextView time1, time2, time3, time4, time5,weight1,weight2,weight3,weight4,weight5;
Handler handler;
Runnable webUpdater = null;
BrowsingTestFragment context;
String[] testArray = new String[5];
int j=0; int foo;
String s;
double kb;
String dataReceived;
public BrowsingTestFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
rootView = inflater.inflate(R.layout.fragment_browsingtest, container, false);
myWebView = new WebView(getContext());
myWebView = rootView.findViewById(R.id.webview);
mStrings = new String[]{
"https://www.google.com",
"https://www.facebook.com",
"https://www.twitter.com",
"https://www.wikipedia.org",
"https://www.linkedin.com"
};
time1 = rootView.findViewById(R.id.textView);
time2 = rootView.findViewById(R.id.textView5);
time3 = rootView.findViewById(R.id.textView8);
time4 = rootView.findViewById(R.id.textView11);
time5 = rootView.findViewById(R.id.textView14);
weight1=rootView.findViewById(R.id.textView4);
start = rootView.findViewById(R.id.button);
weight1 = rootView.findViewById(R.id.textView4);
weight2= rootView.findViewById(R.id.textView7);
weight3= rootView.findViewById(R.id.textView10);
weight4= rootView.findViewById(R.id.textView13);
weight5= rootView.findViewById(R.id.textView16);
startTesting = false;
myWebView.clearCache(true);
myWebView.clearHistory();
myWebView.setVisibility(View.INVISIBLE);
start.setVisibility(View.VISIBLE);
myWebView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
myWebView.getSettings().setSaveFormData(false);
start.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
time1.setText(R.string.defaultString);
time2.setText(R.string.defaultString);
time3.setText(R.string.defaultString);
time4.setText(R.string.defaultString);
time5.setText(R.string.defaultString);
weight1.setText(R.string.defaultString);
weight2.setText(R.string.defaultString);
weight3.setText(R.string.defaultString);
weight4.setText(R.string.defaultString);
weight5.setText(R.string.defaultString);
last_page_start = now = exactTime = 0;
myWebView.clearCache(true);
myWebView.clearHistory();
myWebView.getSettings().setJavaScriptEnabled(true);
myWebView.setHorizontalScrollBarEnabled(false);
myWebView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
myWebView.getSettings().setSaveFormData(false);
myWebView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
return true;
}
});
if (!startTesting) {
i = 0;
startTesting = true;
myWebView.setVisibility(View.VISIBLE);
start.setVisibility(View.INVISIBLE);
startLoadURLs();
} else {
startTesting = false;
myWebView.setVisibility(View.INVISIBLE);
start.setVisibility(View.VISIBLE);
}
}
});
myWebView.setWebChromeClient(new MyWebChromeClient(this));
myWebView.setWebViewClient(new WebViewClient() {
boolean redirect = false;
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
dataReceived=null;
dataReceived=String.valueOf(TrafficStats.getUidRxBytes(android.os.Process.myUid()));
foo= Integer.parseInt(dataReceived);
kb= Math.round(((double) foo/8192)*.9);
s=String.valueOf(kb);
testArray[j]=s;
j++;
Log.i("onPageStartedurl", "onPageStarted last_page_start" + last_page_start);
if (redirect == false)
last_page_start = System.nanoTime();
Log.i("onPageStartedurl", "onPageStarted last_page_start" + last_page_start);
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
now = System.nanoTime();
Log.i("onPageFinishedurl", "onPageFinished now" + now);
}
@Override
public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
super.onReceivedError(view, request, error);
Log.i("onReceivedErrorurl", "onReceivedError");
now = last_page_start;
}
});
return rootView;
}
private void startLoadURLs() {
MainActivity.mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
myWebView.loadUrl(mStrings[i]);
Log.i("mStringsurl", "mStrings" + mStrings[i]);
handler = new Handler();
webUpdater = new Runnable() {
@Override
public void run() {
exactTime = now - last_page_start;
Log.i("exactTimeurl", "exactTime" + exactTime);
double elapsedTimeInSecond = Math.round(((double) exactTime / 1000000000) * 100.0) / 100.0;
Log.i("elapsedTimeInSecondurl", "elapsedTimeInSecond" + elapsedTimeInSecond);
if (i == 0) {
time1.setText("" + elapsedTimeInSecond + " s");
weight1.setText(testArray[0]+"kiB");
} else if (i == 1) {
time2.setText("" + elapsedTimeInSecond + " s");
weight2.setText(testArray[1]+"kiB");
} else if (i == 2) {
time3.setText("" + elapsedTimeInSecond + " s");
weight3.setText(testArray[2]+"kiB");
} else if (i == 3) {
time4.setText("" + elapsedTimeInSecond + " s");
weight4.setText(testArray[3]+"kiB");
} else if (i == 4) {
time5.setText("" + elapsedTimeInSecond + " s");
weight5.setText(testArray[4]+"kiB");
}
++i;
if (i < mStrings.length) {
myWebView.clearCache(true);
myWebView.clearHistory();
myWebView.clearFormData();
myWebView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
myWebView.getSettings().setSaveFormData(false);
startLoadURLs();
} else {
handler.removeCallbacks(webUpdater);
startTesting = false;
myWebView.clearCache(true);
myWebView.clearHistory();
myWebView.clearFormData();
myWebView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
myWebView.getSettings().setSaveFormData(false);
myWebView.setVisibility(View.INVISIBLE);
start.setVisibility(View.VISIBLE);
MainActivity.mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED);
}
}
};
handler.postDelayed(webUpdater, 5000); // 5 seconds
}
private class MyWebChromeClient extends WebChromeClient {
public MyWebChromeClient(BrowsingTestFragment browsingTestFragment) {
super();
context = browsingTestFragment;
}
}
@Override
public void onStop() {
super.onStop();
try {
if (startTesting) {
handler.removeCallbacks(webUpdater);
startTesting = false;
myWebView.clearCache(true);
myWebView.clearHistory();
myWebView.clearFormData();
myWebView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
myWebView.getSettings().setSaveFormData(false);
myWebView.setVisibility(View.INVISIBLE);
start.setVisibility(View.VISIBLE);
MainActivity.mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED);
Toast.makeText(getContext(), "Testting is terminatted", Toast.LENGTH_SHORT).show();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}