当前位置: 首页 > wzjs >正文

企业网站颜色信息手机网站模板下载

企业网站颜色,信息手机网站模板下载,工信部网站备案方法,如何将百度云做成网站文件服务器文章目录 一、问题背景二、代码实现 一、问题背景 经常做 Android 应用的小伙伴应该会有经验,就是如果应用在写入文件的时候,即使写文件的动作是在子线程,也会出现 UI 上的卡顿,这是因为文件的 IO 是由内核去完成的,此…

文章目录

  • 一、问题背景
  • 二、代码实现

一、问题背景

经常做 Android 应用的小伙伴应该会有经验,就是如果应用在写入文件的时候,即使写文件的动作是在子线程,也会出现 UI 上的卡顿,这是因为文件的 IO 是由内核去完成的,此时 CPU 会从 用户态 切换到 内核态,应用将无法获得 CPU 时间片。如果 IO 较少的时候,这个切换不频繁,应用能有足够的时间片去执行绘制。但如果 IO 频繁,例如高速写入的场景下,此时 IO 占用的时间片增加,而我们知道 CPU 资源是有限的,此时会导致应用获得 时间片 将减少,导致 UI 绘制线程出现卡顿,进而影响 UI 上的卡顿。

我们可以使用 top 命令,查看 IO 占用 CPU 的时间片(即 iow):
在这里插入图片描述

因此,如果不能从其它方式去解决此问题(内核层的 IO 调度 和 CPU 调度机制),可以运用简单的方式:在写入文件的时候,限制写入速度,减缓 IO 占用率。

二、代码实现

例如,一个标准的拷贝文件的 Kotlin 方法如下:

originFile.inputStream().buffered().use { inputStream ->targetFile.outputStream().buffered().use { outputStream ->val buffer = ByteArray(1024)var bytesRead: Intwhile (inputStream.read(buffer).also { bytesRead = it } != -1) {outputStream.write(buffer, 0, bytesRead)}outputStream.flush()}
}

这个方法对 源文件 开启了 InputStream,并转换为 BufferInputStream,而对 目标文件 开启了 OutputStream,并转换为 BufferOutputStream,然后再从 InputStream 读取流,输出到 OutputStream,完成文件的读写。

而我们为了实现限制其写入速度,我们可以定义一个速率,例如每秒写入 20M,即每秒写入的字节数为 20 * 1024 * 1024 = 20, 971, 520 。在每次写入量达到 20M 的时候,检查一次写入这 20M 使用的时长,如果这个时长 < 1s ,则表示在这 1s 的时间里,写入的速率已经超过了 20M,需要等待一定时长,使其满足 1s 内只写入 20M 的需求。代码如下:

// 限制拷贝时的速率, 每秒最多拷贝的字节数
val MAX_COPY_SPEED = 20 * 1024 * 1024L// 记录已拷贝的文件大小
var copiedSize = 0L// 记录上次检查性能的时间 (用来计算拷贝速率 限制拷贝速率)
var lastCheckPerformanceTime = System.currentTimeMillis()
// 记录上次检查时 已拷贝的数据量
var lastCheckPerformanceSize = 0LoriginFile.inputStream().buffered(1024 * 1024).use { inputStream ->targetFile.outputStream().buffered().use { outputStream ->val buffer = ByteArray(DEFAULT_BUFFER_SIZE)var bytesRead: Intwhile (inputStream.read(buffer).also { bytesRead = it } != -1) {outputStream.write(buffer, 0, bytesRead)// 增加已拷贝文件的大小copiedSize += bytesRead// 计算拷贝速率 每满 MAX_COPY_SPEED 计算一次速率if (copiedSize - lastCheckPerformanceSize >= MAX_COPY_SPEED) {lastCheckPerformanceSize = copiedSizeval time = System.currentTimeMillis()// 计算写入 MAX_COPY_SPEED 字节数所使用的时间val deltaTime = time - lastCheckPerformanceTimelastCheckPerformanceTime = time// 如果速率大于 MAX_COPY_SPEED 则暂停 等待下次计算if (deltaTime < 1000) {// 延迟 1000 - deltaTime 使满足 1s 内只写入指定量delay(1000 - deltaTime)}}}outputStream.flush()}
}
http://www.dtcms.com/wzjs/824613.html

相关文章:

  • 现在建网站还能赚钱吗泉州网站建设科技公司
  • 宿迁网站建设价位知名个人网站
  • 网站建设案例图片科技时代
  • 音乐类网站模板网站建设规划面试技巧
  • 免费注册网站空间wordpress主题集成插件
  • 电子商务网站开发需要注意问题网站群方案
  • 如何添加网站为信任站点微信网页宣传网站怎么做的
  • 网站开发要考什么证襄阳建设网站公司
  • 建设小微公司网站需要多少钱无锡网站建设服务公司
  • 有没有电脑做兼职的网站安徽seo顾问服务
  • 福建公司网站建设定制类电商平台
  • 购物网站模板html体验好的网站
  • 青岛外贸建设网站制作小型门户网站建设方案
  • 江苏网站制作企业wordpress博客登录
  • 做房产网站需要了解什么东西做网站每年需要多少维护费
  • 制作网站的收入来源于哪里专门做物理的网站
  • 做网站的外包公司可以进吗wordpress4.7企业主题
  • 网站设计师的专业知识用ps做个人网站界面
  • 网站开发后端语言有哪些新余做网站
  • 济南最好的网站制作公司哪家好四川省建设厅资格注册中心网站
  • 做公司网站的好处为什么做的网站有的有弹窗有的没有
  • html5在线制作网站模板茶山网站建设公司
  • 大连开发区网站ps网站主页按钮怎么做
  • 兰州优秀网站推广网站建设平台加盟
  • 小说盗版网站怎么做商城平台是什么
  • 用thinkphp做的网站网站建设 万网
  • 襄阳作风建设年活动网站腾讯邮箱注册
  • 海南住房和城乡建设部网站电子商务网站建设的认识的心得
  • 网站配置文件在哪里墨客网站建设xcyxqc
  • 做网站销售工资wordpress customizr