我已经编写了一个Android代码,尝试在来电时通过网络访问服务器。
使用具有READ_PHONE_STATE意图文件管理器的BroadcastReceiver接收传入呼叫后,将执行网络访问。
通过GPRS执行数据通信。
使用logcat我注意到来自网络的数据检索时间分布很大,范围从1秒到15秒。
以下是发送HTTP请求和等待服务器响应的代码
urlConnection = (HttpURLConnection) url.openConnection();
Log.i("TIMINGS", "Connected to server.");
jsonobj.put("id", id);
String requestContent = jsonobj.toString();
urlConnection.setDoOutput(true); // Will make a POST HTTP request
urlConnection.setFixedLengthStreamingMode(requestContent.length());
urlConnection.setRequestProperty("content-type", "application/json");
urlConnection.setRequestProperty("Connection", "close");
System.setProperty("http.keepAlive", "false");
urlConnection.setDefaultUseCaches(false);
Log.i("TIMINGS", "Sending request...");
// Write the JSON string to the POST request content
DataOutputStream out = new DataOutputStream(urlConnection.getOutputStream());
out.writeBytes(requestContent);
out.flush();
out.close();
Log.i("TIMINGS", "Request sent.");
Log.i("DEBUG", "Connect response code: " + urlConnection.getResponseCode());
// Get the output from the server
Log.i("TIMINGS", "Extracting data from response...");
InputStream in = new BufferedInputStream(urlConnection.getInputStream());
byte[] bytes = getBytesFromInputStream(in);
if (bytes == null) {
return null;
}
in.close();
Log.i("TIMINGS", "Response extracted");
} catch (Exception e) {
e.printStackTrace();
return null;
} finally {
if (urlConnection != null) {
Log.i("TIMINGS", "Disconnected.");
urlConnection.disconnect();
}
}
当通过WIFI执行网络访问时,结果一直很快。
有没有人遇到过类似的结果?当收到来电时,能否通过GPRS实现一致的快速网络接入?
谢谢,
答案 0 :(得分:0)
移动网络的延迟变化很大,主要是因为在非常差的传输路径(大气层)上捕获和恢复错误的科学,数学和工程以及管理动员方面。
您的设备必须从网络请求可用资源,并等待它们被授予。在GSM网络上,语音流量具有优先权,因此可能需要一些时间(是15秒即可) - 设备被告知要对数据进行排队。
在3G网络上,每隔4毫秒就会告知设备塔上接收到的信号质量。您的设备必须根据报告的质量更改编码率。设置传输中的冗余编码量,以便可以高度可靠地恢复数据。编码率的不断变化会影响吞吐量和延迟。
GSM-GPRS像砖墙一样降级,3G-GPRS(现代)是共享通道,因此降级优雅
由于WiFi的传输路径较差(受大气中的水影响) - 它只能存在于整个房间内,因此可变性的范围可以更加紧凑而不会突然降级。