使用 OkHttp 时是否可以限制带宽?

2024-04-09

使用 OkHttp 是否可以限制带宽? (可能使用网络拦截器)。


您可以通过两种方式使其发挥作用:

  1. 手动发送请求并读取流,并在读取时进行节流。
  2. 添加拦截器。

使用OkHttp最好的方法是Interceptor。还有几个简单的步骤:

  1. 继承Interceptor接口。
  2. 继承ResponseBody类。
  3. 在自定义 ResponceBody 中override fun source(): BufferedSource需要返回 BandwidthSource 的缓冲区。

带宽源示例:

class BandwidthSource(
    source: Source,
    private val bandwidthLimit: Int
) : ForwardingSource(source) {

    private var time = getSeconds()

    override fun read(sink: Buffer, byteCount: Long): Long {
        val read = super.read(sink, byteCount)
        throttle(read)
        return read
    }

    private fun throttle(byteCount: Long) {
        val bitsCount = byteCount * BITS_IN_BYTE
        val currentTime = getSeconds()
        val timeDiff = currentTime - time
        if (timeDiff == 0L) {
            return
        }
        val kbps = bitsCount / timeDiff
        if (kbps > bandwidthLimit) {
            val times = (kbps / bandwidthLimit)
            if (times > 0) {
                runBlocking { delay(TimeUnit.SECONDS.toMillis(times)) }
            }
        }
        time = currentTime
    }

    private fun getSeconds(): Long {
        return TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis())
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 OkHttp 时是否可以限制带宽? 的相关文章

  • 使用DBFlow,如何加密已经存在的数据库?

    我正在使用 DBFlow 来处理项目中的数据库 并且我想对现有数据库进行加密 我知道我可能必须删除现有的未加密数据库并创建另一个加密数据库 我也知道我可以将 SQLCipher 与 DBFlow 一起使用 如上所述文档 https gith
  • 模拟器中 Google Wear 上的语音识别器没有语音输入

    我试图使用 Google Wear 网站上的自由形式语音输入 在 hello world 示例中 我刚刚添加了对 textView 的单击 它确实从语音意图中调出 立即发言 活动 但模拟器无法检测到我的麦克风发出的任何声音 我使用的是 Ma
  • 虚拟回调接口

    在 Eclipse 为您创建的来自 Google 的示例主从流代码中 片段中包含以下内容 private Callbacks mCallbacks sDummyCallbacks public interface Callbacks pub
  • 如何在 Android 应用程序中隐藏 Flutterwave API 密钥

    我正在构建一个 Android 应用程序 目前正在将 Flutterwave 集成到我的应用程序中以进行支付 建议我永远不要将 Flutterwave API 密钥放在我的应用程序上 那么我该如何隐藏这些键呢 我正在使用 Retrofit
  • Android 中使用黑白 alpha 蒙版的高效位图蒙版

    我想用黑白 alpha 蒙版来掩盖位图 我的蒙版图像是黑白的 黑色区域意味着透明 白色区域意味着不透明 我需要的是 当我使用此蒙版图像来蒙版任何其他图像时 如果蒙版图像的相应区域为黑色 则生成的图像区域应为透明 否则 生成的图像区域应该是不
  • 写入 Android UI Automator 输出控制台

    我正在 Android UI Automator 上编写一个小包装器 通常我们可以在控制台看到测试用例的状态 我可以访问它并添加我自己的消息吗 我努力了System out println 但这没有用 有什么办法可以做到这一点吗 您可以使用
  • relativelayout导致动画不起作用?

    我有一个活动 其布局仅包含一个 VideoView 这是 XML
  • 如何在Android中的DataBinding的ViewModel类中获取R.string

    我目前正在使用databinding对于我的 Android 应用程序项目 我想设置error留言在我的CustomTextView from R string txtOldPassWordError并从另一个名为的类中进行设置ViewMo
  • 自动删除 Firebase 通知

    我有一个问题 我都读过让通知在 5 分钟后消失 https stackoverflow com questions 15648699 make notification disappear after 5 minutes and 几秒钟后清
  • 如何使用 Google 的 GithubBrowserSample 方法在片段之间共享视图模型?

    我对 Android 架构组件的使用非常陌生 因此我决定使用 GithubBrowserSample 来构建我的应用程序来实现我的许多用例 但我有一个问题 我不知道使用这种方法在片段之间共享视图模型的正确方法是什么 我想共享视图模型 因为我
  • 在 NFC 标签扫描期间,onNewIntent() 内的intent.getAction() 为 null

    这是我第一次使用 NFC 标签 我在清单中声明了 NFC 扫描活动
  • 如何绘制部分位图圆弧?类似于圆形进度轮,但具有显示得越来越多的位图。

    我正在寻找的是一种以顺时针圆形方式显示图像的视图 当进度为 25 时 应显示前 90 度 当进度为 100 时 应绘制完整的 360 度 它与使用 canvas drawArc 非常接近 但此方法仅适用于 Paint 对象 不适用于位图 其
  • 如何在同一设备上运行的 Android 应用程序之间传输文件?

    我正在编写一个与 RESTful 服务交互的 Android 应用程序 该 Web 服务本质上是一个文件系统 并提供元数据以及对文件的 CRUD 访问 我的应用程序检索元数据 并通过ContentProvider 我需要添加与我的应用程序在
  • 我在 android studio 中使用 kotlin 时出现错误

    为什么会出现这个错误 09 12 16 36 31 502 1886 1886 com getloction nourmedhat smartgate getlocation E AndroidRuntime 致命异常 main 进程 co
  • 文本视图不显示全文

    我正在使用 TableLayout 和 TableRow 创建一个简单的布局 其中包含两个 TextView 这是代码的一部分
  • 使 Recyclerview 固定高度并可滚动

    已解决以下检查答案 所以我试图为我的 Android 应用程序创建评论功能 我想在 recyclerview 中显示评论 然后在 recyclerview 下方有一个按钮和文本视图来添加评论 我想让 recyclerview 具有一定的高度
  • Android ScrollView,检查当前是否滚动

    有没有办法检查标准 ScrollView 当前是否正在滚动 方向是向上还是向下并不重要 我只需要检查它当前是否正在滚动 ScrollView当前形式不提供用于检测滚动事件的回调 有两种解决方法可用 1 Use a ListView并实施On
  • 调试android数据绑定?

    谁能告诉我如何调试或找到数据绑定生成的代码 从this https www youtube com watch v NBbeQMOcnZ0链接我发现它生成了所需的代码 我猜您正在寻找自动生成的绑定 java 文件 我也在寻找他们 最后我在这
  • TabLayout 的不同 tabMode

    我正在使用 ViewPager 和 TabLayout 如果选项卡可以放置在显示 tabMode 上 则它们必须是 app tabMode fixed else app tabMode scrollable 我怎样才能做到这一点 我不明白你
  • Android 的代码覆盖率[重复]

    这个问题在这里已经有答案了 可能的重复 Android测试代码覆盖率 Eclipse https stackoverflow com questions 3282702 android test code coverage eclipse

随机推荐

  • 容器化的 Spring 应用程序看不到本地文件?

    我有一个 spring boot 应用程序和一个 postgresql 数据库 我在容器中运行它们docker compose 问题是 正常的通话 例如 localhost 8080 api users返回正常值并正常运行 但是 当我尝试访
  • system.data.oledb.oledbException(0x80004005):找不到文件

    有人可以帮我解决这个错误吗 我想不通 我在 Windows XP 上遇到此错误 但在 Windows 7 上没有 我所做的是附加一张照片并将其保存到数据库 MS Access 作为我的数据库 照片出现在图片框上 但之后一切都变得一团糟 我正
  • R:ggplot背景渐变着色

    我想生成具有渐变颜色的 ggplot 填充绘图面板及其背景 如此处所示 正如您所看到的 渐变背景颜色包含绘图面板及其背景 目前 我只知道所需解决方案的 近似值 library ggplot2 library grid library gri
  • 实施 IEnlistmentNotification 时我应该在哪里执行操作?

    我正在尝试通过实现来创建自定义 资源管理器 I入伍通知 http msdn microsoft com en us library system transactions ienlistmentnotification 28v vs 110
  • Datagrid 与 Gridview [重复]

    这个问题在这里已经有答案了 可能的重复 ASP NET 中 DataGrid 和 GridView 之间的区别 https stackoverflow com questions 4230 the difference between a
  • php中按字母顺序排列的列表组[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我有一个成员表 其中存储有关成员的所有详细信息 包括其姓名 电子邮件 电话等 我希望该名称按字母顺序显示 如示例所示 A Alan Alex
  • 如何更改 Eclipse 模板中使用的 ${user} 变量的值

    我希望 Eclipse 使用从帐户信息中获取的用户真实姓名 而不是硬编码默认的 author 模板 在 Linux 中 但也欢迎 Windows 解决方案 将其输入 Eclipse 配置中的某个位置也是可以接受的 可惜我找不到正确的位置 看
  • Slick 3 从查询中返回自定义案例类

    目前我有这样的事情 val q for department lt departments if department id x employee lt employees if employee departmentId departme
  • 如何防止PayPal重复付款?

    我有一个简单的 立即付款 按钮 通过按钮创建者创建的代码 并添加了一个 自定义 隐藏字段来识别它 我想知道是否可以添加一些额外的隐藏字段来告诉 PayPal 此交易不应进行两次
  • 正则表达式匹配/分组字符串中的重复字符

    我需要一个正则表达式来匹配字符串中的字符组 这是一个示例字符串 qwwwwwwwwweeeeerrtyyyyyqqqqwEErTTT 它应该匹配 比赛组 结果 1 q 2 wwwwwwwww 3 哎呀 4 rr 5 t 6 yyyyy 7
  • 如何在 SP 元数据中配置自定义属性

    我开始知道 在任何 SSO 解决方案中 如果 SP 需要任何其他属性 它可以使用以下方法在其元数据中发布它们 属性消费服务争论 现在可以添加所需的属性 如下所示
  • 如何在 VSTS 构建服务器上为 .Net Core 2 项目编译 Typescript 文件

    我一直在尝试在 VSTS 上的 CI 构建过程中将 TypeScript 文件编译为 JavaScript 文件 一旦生成了 JavaScript 文件 我的 gulp 文件进程就可以将它们处理到 wwwroot 文件夹 该项目在 Visu
  • 在联合上分配泛型类型

    TS 中有没有办法通过联合 分布 泛型类型 type Container a value A type Containers a
  • 使用特定主题标签时检索 Twitter 图片或视频

    我正在寻找为学校活动创建一个页面 基本上我想显示带有特定主题标签的推文的所有图片 如果可能的话还可以显示任何 youtube 或 vimeo 视频 我一直在查看 twitter API 但是我找不到起点 有人知道如何解决这个问题吗 我将不胜
  • 可以使用正则表达式来匹配嵌套模式吗? [复制]

    这个问题在这里已经有答案了 是否可以编写一个正则表达式来匹配出现次数未知的嵌套模式 例如 当外大括号内嵌套未知数量的左大括号时 正则表达式是否可以匹配左大括号和右大括号 例如 public MyMethod if test More Mor
  • ColdFusion UI 标签到 jQuery 的转换

    我正在尝试将一些具有各种 ColdFusion UI 标签的代码转换为 jQuery 我必须制定一个迁移计划 目前这就是我所拥有的 Tag Replacement CFApplet CFCalendar http jqueryui com
  • 选择单个列值并将其存储在变量 oracle sql 中

    我想获取特定列值 a id 并将其存储到变量 v id 中 然后使用该值传递到存储过程中 DECLARE v id a id TYPE BEGIN SELECT id into v id from a where a name test a
  • Java中有没有办法预加1以上?

    在 Java 中 您可以通过以下方式对整数 i 进行后增量 j i 2 我想通过预增量做同样的事情 e g j 2 i This will not work 只需将增量语句放在括号中即可 例如 以下将输出pre 2 int i 0 Syst
  • 如何编写 GraphQL 查询

    我有一个有效的网络 graphql 查询 me on Student profile fullName emailId mobileNumber civilId address city state country zipCode user
  • 使用 OkHttp 时是否可以限制带宽?

    使用 OkHttp 是否可以限制带宽 可能使用网络拦截器 您可以通过两种方式使其发挥作用 手动发送请求并读取流 并在读取时进行节流 添加拦截器 使用OkHttp最好的方法是Interceptor 还有几个简单的步骤 继承Intercepto