接收电话时Android GPRS网络通讯延迟

时间:2014-11-23 13:01:42

标签: android performance networking gprs

我已经编写了一个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实现一致的快速网络接入?

谢谢,

1 个答案:

答案 0 :(得分:0)

移动网络的延迟变化很大,主要是因为在非常差的传输路径(大气层)上捕获和恢复错误的科学,数学和工程以及管理动员方面。

您的设备必须从网络请求可用资源,并等待它们被授予。在GSM网络上,语音流量具有优先权,因此可能需要一些时间(是15秒即可) - 设备被告知要对数据进行排队。

在3G网络上,每隔4毫秒就会告知设备塔上接收到的信号质量。您的设备必须根据报告的质量更改编码率。设置传输中的冗余编码量,以便可以高度可靠地恢复数据。编码率的不断变化会影响吞吐量和延迟。

GSM-GPRS像砖墙一样降级,3G-GPRS(现代)是共享通道,因此降级优雅

由于WiFi的传输路径较差(受大气中的水影响) - 它只能存在于整个房间内,因此可变性的范围可以更加紧凑而不会突然降级。