OkHttp

OkHttp是一个用于Android和Java应用的高效HTTP客户端库。它具有以下优点:

优点

  1. 高效连接池
    • 支持连接复用(Connection Pooling)减少延迟。
    • 有效管理HTTP/2多路复用。
  2. 透明压缩
    • 自动处理Gzip压缩,减少传输的数据量。
  3. 缓存响应
    • 内置缓存机制,帮助减少不必要的网络调用,提高速度和节省流量。
  4. 异步请求
    • 支持异步请求,避免阻塞主线程,提高应用响应速度。
  5. 支持WebSocket
    • 提供WebSocket支持,便于实时通信。
  6. 安全性
    • 支持TLS加密,确保数据传输的安全性。
  7. 易于集成和使用
    • 简单的API设计,方便与其他库(如Retrofit)集成。

简单使用

  1. 依赖
    implementation("com.squareup.okhttp3:okhttp:4.9.3")
    implementation("com.google.code.gson:gson:2.8.8")
  1. 定义json转换的对象
data class ImageData(
    val createTime: Long,
    val id: Long,
    val name: String,
    val path: String,
    val size: Long
)

data class ApiResponse(
    val data: List<ImageData>,
    val errorCode: Int,
    val isSuccess: Boolean
)

  1. 直接调用即可,主要在接收到后使用Gson反序列化。
class OkHttpActivity : AppCompatActivity() {
    private lateinit var binding: ActivityOkHttpBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityOkHttpBinding.inflate(layoutInflater)
        setContentView(binding.root)
        binding.recyclerView.layoutManager = LinearLayoutManager(this)
        fetchData()
    }
    private fun fetchData() {
        val client = OkHttpClient()
        val request = Request.Builder()
            .url("http://192.168.42.7:9876/image/listImage?page=0&pageSize=100")
            .build()

        client.newCall(request).enqueue(object : okhttp3.Callback {
            override fun onFailure(call: okhttp3.Call, e: IOException) {
                e.printStackTrace()
            }

            override fun onResponse(call: okhttp3.Call, response: okhttp3.Response) {
                response.body?.string()?.let { jsonString ->
                    val apiResponse = Gson().fromJson(jsonString, ApiResponse::class.java)
                    runOnUiThread {
                        binding.recyclerView.adapter = ImageAdapter(apiResponse.data)
                    }
                }
            }
        })
    }
}

效果
在这里插入图片描述

原理

okhttp(传输层)
  1. Deque(双端队列)
  2. running队列数量<64,并且同时访问同一个host数量<5,就直接加入running队列,否则则加入等待队列
  3. 基于第二点,所以线程池不设置等待队列,使用SynchronousQueue无容量队列
  4. 构建者模式,责任链模式
  5. connectInteceptor创建socket请求
  6. ConnectionPool,设置线程池为守护线程
    • 避免阻止 JVM 正常退出。
    • 更高效地管理后台任务和连接。
    • 自动清理资源,防止资源泄漏。
  7. promoteCalls执行下一个任务
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值