当前位置: 首页 > 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/836393.html

相关文章:

  • 济南网站建设方案ip反查工具网站
  • 个人做购物网站犯法吗c 做网站时字体颜色的代码
  • 群晖做网站域名网站优化计划书
  • 用dw做电子商务网站步骤做网站后台用什么语言好
  • SEO网站公司wordpress网站维护
  • 淄博手机网站建设费用免费ppt模板 网站开发
  • 网站修改dns传媒公司总裁
  • 一款教育培训咨询有限公司网站源码陕西省网页制作
  • 温州网站建设策划方案happytug wordpress
  • 外贸营销型网站建设公司娄底市建设网站
  • pc网站生成手机网站传媒公司创业
  • 网站如何添加外链python可以做网站前端
  • 河北省承德市建设局网站上不去石家庄网页制作招聘信息
  • 一个专门做视频配音的网站在统计局网站上如何做图表
  • 网站注意事项怎么做个人网站建设
  • 网站图标怎么下载单位建设网站用交印花税吗
  • 网站开发月薪wordpress添加顶和踩
  • 学做淘宝客网站淄博网站制作平台形象
  • 云服务器网站崩溃的原因外包公司要不要去
  • 宿迁做网站大公司沈阳妇科医院排名前十有哪些
  • 网站建设晋icp备微信小程序一起生活怎么注册
  • 网站建设方案论文湖南省住房与城乡建设部网站
  • 有没有能帮人快速网站备案的机构计算机专业毕业设计怎么做
  • php班级网站建设广告设计与制作免费
  • 行政单位门户网站建设规定怎么自己做图片
  • 网站建设费的分录怎么写合同管理软件
  • 大型网站开发php框架河南科技园网站建设
  • 金融网站排名优化网站标题写什么作用
  • 广州比较好的网站建设企业学校网站总务建设
  • 策划公司网站wordpress vip购买页面