【发布时间】:2016-03-09 11:01:52
【问题描述】:
我对 Android 比较陌生。我对 Android 中用于网络通信的 2 个 API 的功能有一个非常基本的困惑。
- openConnection()
- 连接()
从conn.connect() 看来,connect() 是实际创建连接的原因。
从url.openConnection() 看来,openConnection() 实际上创建了连接。
从围绕 SO 主题的一些讨论中, conn.connect() 支持前者,4 票赞成 url.openConnection() 支持后者,得到了 97 票赞成。
有人可以帮忙解惑吗?
【问题讨论】:
-
tbray.org/ongoing/When/201x/2012/01/17/HttpURLConnection 令人惊讶的是 4 票。 Url 方法实际上只创建一个连接对象,用于进行连接。
-
@zapl 感谢您的指点。您提供的链接信息丰富。但是,那里也有一些令人困惑的地方。它在一个地方提到 conn.getOutputStream();执行网络 i/o 并在另一个中说“// 与前面示例中的相同调用不同,这 // 不会引发网络 IO。in = conn.getInputStream();”此外,它没有提及任何关于连接()。也非常感谢您提供一些帮助。
-
当还没有连接时,这些方法会自动调用
connect()。您不必自己调用它。 Wrt 不清楚:措辞有点糟糕,意思是getInputstream导致没有请求等,因为http服务器在他们自己收到请求后立即发送响应。阅读回复已经从getResponseCode开始。 -
好的。这就说得通了。谢谢。我还想了解一件事。我正在开发一个 Xposed(Android 框架)模块,其中我想将应用程序进行的所有 https 网络调用连接到后端服务器。我的方法应该是什么?挂钩 connect() (因为现在我明白 connect() 无论如何都会被这些方法中的任何一个调用)?
-
我想这样就可以了。试试吧。 (很多软件也自带了自己的http客户端实现(ok http很流行)所以你不会看到所有的https调用)
标签: java android network-programming httpurlconnection