我正在填充数据列表,该数据分 3 步加载,因此在完成第一步后,我已经向用户显示了数据。然后每当数据加载状态发生变化时,我都会逐步更新 UI...
我使用 RecyclerView 来显示我的数据。我可以观察到,当单个步骤的加载速度非常快时,UI 会阻塞(尤其是当用户当前滚动速度非常快时)...所以我需要对事件进行分组,并且仅每 x 毫秒更新一次 UI。 ..
通过测试,我看到每 150 毫秒更新一次 UI 看起来既好又快,并且不会导致任何明显的卡顿。
但我不确定旧设备或其他设备的 react 如何。
有没有人有这方面的经验,可以告诉我哪个值比较好?
一般问题
这个问题可能会被问得更普遍:当非常频繁地更新 UI 时,避免阻塞 UI 的最佳频率是多少?或者在再次更新 UI 之前等待的最短时间是多少
最佳答案
你的问题很有意思,有一些解决方法。我只是把一些解决方案放在这里作为引用。
<强>1。缓存您的数据
当用户滚动时,您的适配器将从数组、数据库或网络中查询一些数据。由于您的性能缓慢,我想这可能是一个问题,因为加载数据时间长。所以解决这个问题最好的方法就是缓存数据。
您可以使用 LRUCache 在内存中缓存数据使用 DiskLRUCache 类和磁盘上有针对此问题的 Android 指南:Caching bitmap
伪代码:
if (memoryCache.get(key)) {
// load data from memory and assign to cell
} else if (diskCache.get(key)) {
// load data from disk and assign to cell
} else {
// get data from database or network
// assign to cell
// save to memory cache
// save to disk cache
}
<强>2。使用不同线程加载数据
当您处理长时间运行的任务会影响您的 UI 时,您应该推迟到 UI 线程并为您的目的创建新线程。您可以使用 Asynctask以此目的。
该方法的问题是:从后台加载数据时,滚动事件在屏幕上显示的单元格需要不同的数据。因此,当旧的异步任务对象完成工作时,它会将旧数据分配给您的单元格。 撞!!!。所以你必须仔细控制你的细胞状态。有一个很好的教程:Process Image Loading In Different Thread
<强>3。简化您的 View
如果您在滚动时不使用诸如数据库处理、网络请求之类的东西,那么问题可能是您的 View 太复杂了。你应该使用这个工具:Hierarchy Viewer用于检查您的布局文件有性能问题。您还可以使用工具 GPU Overdraw tool用于检查您 View 中的许多部分是否绘制了许多不必要的东西。
<强>4。根据帧率检测更新数据的时间
您必须始终将帧速率保持在 60fps 以下。使用该帧速率,用户将不会在您看来识别出滞后、笨重……。您可以使用 GPU Profiler用于检查帧速率。根据该帧速率,您将决定应该简化 View 、优化 onDraw 方法或优化 GPU 绘图(由于过度绘制)以保持您的 UI 帧速率 <=>=>
我已将上述所有方法集成到名为 ImageUploader 的项目中.此应用程序将图片上传到 Flickr 服务并显示所有上传图片的列表或查看单张图片。
Google 上传了一系列 Android Performance Pattern教你很多有用的东西,比如缓存,批处理,有用的技巧......
希望这有帮助:)
强>强>强>强>关于android - 在 RecycleView 中有效加载数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35038787/
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
鉴于我有以下迁移:Sequel.migrationdoupdoalter_table:usersdoadd_column:is_admin,:default=>falseend#SequelrunsaDESCRIBEtablestatement,whenthemodelisloaded.#Atthispoint,itdoesnotknowthatusershaveais_adminflag.#Soitfails.@user=User.find(:email=>"admin@fancy-startup.example")@user.is_admin=true@user.save!ende
这是一道面试题,我没有答对,但还是很好奇怎么解。你有N个人的大家庭,分别是1,2,3,...,N岁。你想给你的大家庭拍张照片。所有的家庭成员都排成一排。“我是家里的friend,建议家庭成员安排如下:”1岁的家庭成员坐在这一排的最左边。每两个坐在一起的家庭成员的年龄相差不得超过2岁。输入:整数N,1≤N≤55。输出:摄影师可以拍摄的照片数量。示例->输入:4,输出:4符合条件的数组:[1,2,3,4][1,2,4,3][1,3,2,4][1,3,4,2]另一个例子:输入:5输出:6符合条件的数组:[1,2,3,4,5][1,2,3,5,4][1,2,4,3,5][1,2,4,5,3][
我收到这个错误:RuntimeError(自动加载常量Apps时检测到循环依赖当我使用多线程时。下面是我的代码。为什么会这样?我尝试多线程的原因是因为我正在编写一个HTML抓取应用程序。对Nokogiri::HTML(open())的调用是一个同步阻塞调用,需要1秒才能返回,我有100,000多个页面要访问,所以我试图运行多个线程来解决这个问题。有更好的方法吗?classToolsController0)app.website=array.join(',')putsapp.websiteelseapp.website="NONE"endapp.saveapps=Apps.order("
有时我需要处理键/值数据。我不喜欢使用数组,因为它们在大小上没有限制(很容易不小心添加超过2个项目,而且您最终需要稍后验证大小)。此外,0和1的索引变成了魔数(MagicNumber),并且在传达含义方面做得很差(“当我说0时,我的意思是head...”)。散列也不合适,因为可能会不小心添加额外的条目。我写了下面的类来解决这个问题:classPairattr_accessor:head,:taildefinitialize(h,t)@head,@tail=h,tendend它工作得很好并且解决了问题,但我很想知道:Ruby标准库是否已经带有这样一个类? 最佳
我一直致力于让我们的Rails2.3.8应用程序在JRuby下正确运行。一切正常,直到我启用config.threadsafe!以实现JRuby提供的并发性。这导致lib/中的模块和类不再自动加载。使用config.threadsafe!启用:$rubyscript/runner-eproduction'pSim::Sim200Provisioner'/Users/amchale/.rvm/gems/jruby-1.5.1@web-services/gems/activesupport-2.3.8/lib/active_support/dependencies.rb:105:in`co
我正在尝试使用Curbgem执行以下POST以解析云curl-XPOST\-H"X-Parse-Application-Id:PARSE_APP_ID"\-H"X-Parse-REST-API-Key:PARSE_API_KEY"\-H"Content-Type:image/jpeg"\--data-binary'@myPicture.jpg'\https://api.parse.com/1/files/pic.jpg用这个:curl=Curl::Easy.new("https://api.parse.com/1/files/lion.jpg")curl.multipart_form_
无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD
本教程将在Unity3D中混合Optitrack与数据手套的数据流,在人体运动的基础上,添加双手手指部分的运动。双手手背的角度仍由Optitrack提供,数据手套提供双手手指的角度。 01 客户端软件分别安装MotiveBody与MotionVenus并校准人体与数据手套。MotiveBodyMotionVenus数据手套使用、校准流程参照:https://gitee.com/foheart_1/foheart-h1-data-summary.git02 数据转发打开MotiveBody软件的Streaming,开始向Unity3D广播数据;MotionVenus中设置->选项选择Unit
文章目录一、概述简介原理模块二、配置Mysql使用版本环境要求1.操作系统2.mysql要求三、配置canal-server离线下载在线下载上传解压修改配置单机配置集群配置分库分表配置1.修改全局配置2.实例配置垂直分库水平分库3.修改group-instance.xml4.启动监听四、配置canal-adapter1修改启动配置2配置映射文件3启动ES数据同步查询所有订阅同步数据同步开关启动4.验证五、配置canal-admin一、概述简介canal是Alibaba旗下的一款开源项目,Java开发。基于数据库增量日志解析,提供增量数据订阅&消费。Git地址:https://github.co