【易客吧】_全网激活码总代_激活码商城

您现在的位置是:首页 > 热门资讯 > 正文

热门资讯

优化 Android 事件分发性能:了解最佳实践和常见陷阱 (优化Android14及以上兼容性问题是什么意思)

用户投稿2024-04-19热门资讯16

事件分发是 Android 系统中的一项关键功能,负责将触摸、按键和手势等用户输入事件从源头传递到适当的视图。事件分发可能成为应用程序性能的瓶颈,尤其是在处理大量事件时。

为了帮助您提高应用程序的事件分发性能,本文将探讨一些最佳实践和常见的陷阱。

最佳实践

1. 减少事件数量

使用事件合并:事件合并将来自不同源的多个事件合并为一个事件,从而减少传递到应用程序的事件数量。忽略不需要的事件:如果您的应用程序不需要处理某些类型的事件(例如,滚动事件),请使用 View.setOnTouchListener() View.setOnKeyListener() 忽略它们。

2. 优化事件处理

使用事件分发器:事件分发器通过将事件分配给不同的线程来并行化事件处理。缓存视图树:缓存视图树可以减少在事件分发过程中查找视图的开销。使用高效的事件侦听器:编写高效的事件侦听器,避免在事件处理中执行耗时的操作。

3. 避免常见的陷阱

过度嵌套视图:视图嵌套过多会增加事件分发延迟。尝试保持视图层次结构扁平。使用不透明度和剪辑:不透明度和剪辑会导致额外的绘制调用,从而影响事件分发性能。在主线程中执行耗时操作:在主线程中执行耗时操作会阻塞事件分发。使用工作线程来处理这些操作。

Android 14 及以上兼容性问题

在 Android 14 及以上版本中,事件分发系统进行了重大更改,这可能会影响应用程序的性能。以下是一些需要注意的方面:触点区域:触点区域已弃用,取而代之的是使用 优化 Android 事件分发性能:了解最佳实践和常见陷阱 (优化Android14及以上兼容性问题是什么意思) 第1张 MotionEvent.getPointerBounds() 获取触点区域。动作序列:动作序列已合并为单个 MotionEvent 对象。这可能会影响依赖动作序列的事件处理。事件合并:事件合并的默认行为已更改。开发人员需要明确启用事件合并以获得与 Android 13 及更早版本相同的行为。要获得 Android 14 及以上版本的最佳事件分发性能,请确保更新您的应用程序以支持这些更改。

结论

通过遵循这些最佳实践和避免常见的陷阱,您可以显着提高应用程序的事件分发性能。了解 Android 14 及以上版本中的兼容性问题并相应地更新您的应用程序也很重要。通过优化事件分发,您可以确保应用程序响应迅速且流畅,从而为用户提供更好的体验。

Android手机优化之-系统优化

Android安卓手机用的久了,手机性能会明显的变差,比如:手机操作变慢、待机时间变短、玩游戏自动退出、上网变慢、开机速度蜗牛等等,原因很多:系统日益庞大、废品文件越来越多、启动加载的程序越来越多、系统默认开启的服务越来越多、后台运行程序越来越多等等。 不仅是用久了的手机,就算是一个新买的手机,也需要进行一些设置优化,关闭不常用的开机服务、屏蔽一些压根无用的后台程序等等。 本系列文章的目的是引导大家了解Android系统机制,使用哇呗优化大师合理的优化手机系统,最大可能的发挥你的手机性能。 Android手机优化第一招:系统优化,优化手机内存、文件、缓存、电源等。 操作指引:打开哇呗优化大师,点击“系统优化”,进入。 优化操作:1.手机一键优化:包含内存占用、手机存储、系统内存优化、废品文件清理四个选择,点击“一键优化”即可。 不仅可以显著的提高手机运行速度,还可以节省存储卡空间、降低手机CPU使用率,不再纠结于智能手机的卡吧-死机- -! 使用窍门:手机开机一段时间后或者玩大型游戏前点一下,最简单最快速提升系统性能和速度。 2.清理网络缓存:网络程序占用的缓存管理,可以节省手机内存空间和提高上网速度。 很常遇到的一个现象,APK安装包体积很少,但运行一段时间后缺累积了上M的缓存,导致整体在手机内存空间占用率高,内存空间越少,系统所能装的软件就会越少了,经常性的清理网络缓存能使您的手机能装更多的软件。 单个操作:点击程序图标进入,点击“清除缓存”即可清理该程序缓存,点击手机“返回”按键,即可返回系统优化界面。 批量操作:点击“清理网络缓存”按钮进入,点击“清除缓存”即可清理当前程序缓存,点击手机“返回”按键,即可进入下一个程序操作界面,所有程序清理完成后,点击手机“返回”按键,返回系统优化界面。 3.默认程序管理:管理手机系统默认的执行程序,比如上网默认打开的浏览器(ucweb,QQ浏览器等)、音乐默认播放程序(酷狗,天天动听)等。 目前暂时只支持单个设置。 单个操作:点击程序图标进入,点击“清除默认设置”即可,点击手机“返回”按键,即可返回系统优化界面。 批量操作:点击“重置以上默认打开程序”进入,点击“清除默认设置”即可清除当前程序设置,点击手机“返回”按键,即可进入下一个程序操作界面,所有程序清理完成后,点击手机“返回”按键,返回系统优化界面。 4.手机节电优化:可以进行节电优化和查看电视状态、使用详情。 点击“节点优化(21项)”进入,可以看到21条android手机节点秘籍,根据文字操作即可,让你的手机拥有超长的待机时间。 QQ浏览器APP

Android性能优化总结

常用的Android性能优化方法:一、布局优化: 1)尽量减少布局文件的层级。 层级少了,绘制的工作量也就少了,性能自然提高。 2)布局重用 <include标签> 3)按需加载:使用ViewStub,它继承自View,一种轻量级控件,本身不参与任何的布局和绘制过程。 他的layout参数里添加一个替换的布局文件,当它通过setVisibility或者inflate方法加载后,它就会被内部布局替换掉。 二、绘制优化: 基于onDraw会被调用多次,该方法内要避免两类操作: 1)创建新的局部对象,导致大量废品对象的产生,从而导致频繁的gc,降低程序的执行效率。 2)不要做耗时操作,抢CPU时间片,造成绘制很卡不流畅。 三、内存泄漏优化: 1)静态变量导致内存泄漏比较明显 2)单例模式导致的内存泄漏单例无法被废品回收,它持有的任何对象的引用都会导致该对象不会被gc。 3)属性动画导致内存泄漏 无限循环动画,在activity中播放,但是onDestroy时没有停止的话,动画会一直播放下去,view被动画持有,activity又被view持有,导致activity无法被回收。 四、响应速度优化: 1)避免在主线程做耗时操作 包括四大组件,因为四大组件都是运行在主线程的。 2)把一些创建大量对象等的初始化工作放在页面回到前台之后,而不应该放到创建的时候。 五、ListView的优化: 1)使用convertView,走listView子View回收的一套:RecycleBin 机制 主要是维护了两个数组,一个是mActiveViews,当前可见的view,一个是mScrapViews,当前不可见的view。 当触摸ListView并向上滑动时,ListView上部的一些OnScreen的View位置上移,并移除了ListView的屏幕范围,此时这些OnScreen的View就变得不可见了,不可见的View叫做OffScreen的View,即这些View已经不在屏幕可见范围内了,也可以叫做ScrapView,Scrap表示废弃的意思,ScrapView的意思是这些OffScreen的View不再处于可以交互的Active状态了。 ListView会把那些ScrapView(即OffScreen的View)删除,这样就不用绘制这些本来就不可见的View了,同时,ListView会把这些删除的ScrapView放入到RecycleBin中存起来,就像把暂时无用的资源放到回收站一样。 当ListView的底部需要显示新的View的时候,会从RecycleBin中取出一个ScrapView,将其作为convertView参数传递给Adapter的getView方法,从而达到View复用的目的,这样就不必在Adapter的getView方法中执行()方法了。 RecycleBin中有两个重要的View数组,分别是mActiveViews和mScrapViews。 这两个数组中所存储的View都是用来复用的,只不过mActiveViews中存储的是OnScreen的View,这些View很有可能被直接复用;而mScrapViews中存储的是OffScreen的View,这些View主要是用来间接复用的。 2)使用ViewHolder避免重复地findViewById 3)快速滑动不适合做大量异步任务,结合滑动监听,等滑动结束之后加载当前显示在屏幕范围的内容。 4)getView中避免做耗时操作,主要针对图片:ImageLoader来处理(原理:三级缓存) 5)对于一个列表,如果刷新数据只是某一个item的数据,可以使用局部刷新,在列表数据量比较大的情况下,节省不少性能开销。 六、Bitmap优化: 1)减少内存开支:图片过大,超过控件需要的大小的情况下,不要直接加载原图,而是对图片进行尺寸压缩,方式是 采样,inSampleSize 转成需要的尺寸的图片。 2)减少流量开销:对图片进行质量压缩,再上传服务器。 图片有三种存在形式:硬盘上时是file,网络传输时是stream,内存中是stream或bitmap,所谓的质量压缩,它其实只能实现对file的影响,你可以把一个file转成bitmap再转成file,或者直接将一个bitmap转成file时,这个最终的file是被压缩过的,但是中间的bitmap并没有被压缩。 (,100,bos);七、线程优化: 使用线程池。 为什么要用线程池? 1、从“为每个任务分配一个线程”转换到“在线程池中执行任务” 2、通过重用现有的线程而不是创建新线程,可以处理多个请求在创建销毁过程中产生的巨大开销 3、当使用线程池时,在请求到来时间 ,不用等待系统重新创建新的线程,而是直接复用线程池中的线程,这样可以提高响应性。 4、通过和适当调整线程池的大小 ,可以创建足够多的线程以使处理器能够保持忙碌状态,同时还可以防止过多线程相互竞争资源而使应用程序耗尽内存或者失败。 5、一个App里面所有的任务都放在线程池中执行后,可以统一管理 ,当应用退出时,可以把程序中所有的线程统一关闭,避免了内存和CPU的消耗。 6、如果这个任务是一个循环调度任务,你则必须在这个界面onDetach方法把这个任务给cancel掉,如果是一个普通任务则可cancel,可不cancel,但是最好cancel 7、整个APP的总开关会在应用退出的时间把整个线程池全部关闭。 八、一些性能优化建议: 1)避免创建过多对象,造成频繁的gc 2)不要过多使用枚举,枚举占用的空间比整型大很多 3)字符串的拼接使用StringBuffer、StringBuilder来替代直接使用String,因为使用String会创建多个String对象,参考第一条。 4)适当使用软引用,(弱引用就不太推荐了) 5)使用内存缓存和磁盘缓存。

如何对android客户端性能优化

性能优化是一个大的范畴,如果有人问你在Android中如何做性能优化的,也许都不知道从哪开始说起。 首先要明白的是,为什么我们的App需要优化,最显而易见的时刻:用户say,什么狗屎,刷这么久都没反应,取关卸载算了。 这跟什么有关,我们先苍白的反驳下,尼玛用户设备老旧网又烂,关我屁事,根本不用优化。 可是,老板拍板了,施压给CTO,然后CTO又来找你:Y的今天必须给我想办法优化了,不然不准回家。 好吧,为什么从UI的表象上看,App又卡又慢而且还错乱。 我们试着来剖析下吧。 题外话:把minSDK改到4.0+,去特么的low用户,连手机都不愿意换,还能指望它能给你带来多少营收么,直接pass掉吧。 4.0前的系统bug不少,不能为了弥补这些bug而降低了整体的高性能。 好了,让我们先从UI说起:首先要明白的是UI的绘制流程:measure-layout-draw,measure与layout都需要for loop所有的子控件,汇集起来才能完成绘制,布局。 所以子控件越多,所消耗的时间越长(inflate,layout_weight,relative,多层嵌套等),减少不必要的子控件或层级,是相当有必要的。 你可以通过merge,viewstub这些标签来减少层级嵌套。 如果你的空间观念没那么好,可以用HierarchyViewer工具来检查。 对于Listview或者GridView这种多item的组件来说,复用item可以减少inflate次数,通过setTag,getTag的ViewHolder方式实现复用,这里要注意的是,holder中的控件最好reset后再赋值,避免图片,文字错乱。 对于ViewPager第一次显示时卡顿以及左右滑动卡顿,有以下几种优化方式:ViewPager同时缓存page数最好为最小值3,如果过多,那么第一次显示时,ViewPager所初始化的pager就会很多,这样pager累积渲染耗时就会增多,看起来就卡。 每个pager应该只在显示时才加载网络或数据库(UserVisibleHint=true),最好不要预加载数据,以免造成浪费图片显示不出来或者加载时间太长,怎么办?分两部分,下载速度,加载速度。 对于下载,要控制好同时下载的最大任务数(平均速度慢),同时给InputStream再包一层缓冲流会更快(如BufferedInputStream)。 对于加载速度,我们要知道一点,虽然下载的图片可能只有几百K,但是decode成bitmap所占用的内存可是成倍的,尽可能的减小图片size是根本因素,让服务端提供不同分辨率的图片才是最好的解决方案,内存总有耗尽的时刻,别老想着大分辨率会更清晰,实际就只有150*150的空间,非给弄张1000*1000的图片是不恰当的。 另外论加载速度:内存>硬盘>网络,合理的使用内存缓存也是关键。 假如自己写不好,没关系,有那么多开源的图片缓存框架,不用自己操心。 再说缓存有很多种缓存方式,也不用Stay列举了,我们要说的是搭配使用。 比方说,以前我们一直在用强引用,HashMap,后来我们发现占内存,我们就用软引用,弱引用来及时回收,再后来因为回收机制不可控,所以又有了lrucache,disklrucache通过算法来平衡内存与硬盘缓存。 随着android版本的推进与演化,我们也应该拥抱变化。 如果你的App里还有软引用,弱引用的地方,不妨再check下。 比方说网络+数据库。 网络我们一般都是去主动获取,而非被动接受。 那如果说数据是重复的或者未更改的呢?那我们去取一次网络数据有什么意义呢?我的解决方案是给每个activity或fragment或每个组件设置一个最大请求间隔,比如一个listview,第一次请求数据时,保存一份到数据库,并记下时间戳,当下次重新初始化时,判断是否超过最大时间间隔(如5分钟),如果没有,只加载数据库数据,不需要再做网络请求。 当然,还有一些隐式的http请求框架会缓存服务器数据,在一定时间内不再请求网络,或者当服务器返回304时将之前缓存的数据直接返回。 反正也说到网络了,那我们也来说说现在有很多现成HTTP框架供我们使用,我们几乎只用写配置就可以搞定一个url请求,但是这里有很多需要服务端配合的,比如:json数据格式,WebP代替jpg,支持断点续传,多个请求合并成一个,尽量不做重定向,服务器缓存以及负载均衡等。 对客户端本身,除了上述的实现,我们还需要合理的缓存,控制最大请求并发量,及时取消已失效的请求,过滤重复请求,timeout时间设置,请求优先级设置等。 优化可不是一个人的事,实现一个功能简单,但是想优化重构,那是很不容易的事。 需要多方面的预判与联调。 合理的假设与实践是优化最重要的手段。 说完这些具体的点,我们再来说说一些常识,或者称之为代码规范。 你要知道for loop中不要声明临时变量,不到万不得已不要在里面写try catch。 明白废品回收机制,避免频繁GC,内存泄漏,OOM(有机会专门说)合理使用数据类型,比如StringBuilder代替String,(笔试题最常见的是str+=str中有几个对象) ,少用枚举enum,少用父类声明(List,Map)如果你有频繁的new线程,那最好通过线程池去execute它们,减少线程创建开销。 你要知道单例的好处,并正确的使用它。 多用常量,少用显式的action_key,并维护一个常量类,别重复声明这些常量。 如果可以,至少要弄懂设计模式中的策略模式,组合模式,装饰模式,工厂模式,观察者模式,这些能帮助你合理的解耦,即使需求频繁变更,你也不用害怕牵一发而动全身。 需求变更不可怕,可怕的是没有在写代码之前做合理的设计。 当然还有很多很多,Stay所说的也只是一个大的轮廓,还是需要自己不断的尝试。 会开发写代码跟会做产品的区别还是蛮大的,仅仅是态度就能刷死80%的码农了。 当你碰到一些需要优化的地方,耐心的去分析,时间的累积会让你成为真正的工程师。 另外优化也没有绝对的完美,每一次优化都是基于当前的环境来做的,要明白沟通是最好的优化,不盲从,不随便,三思而后行。 Android上如何做性能优化的?大概写三年代码就能差不多知道了。

若对本页面资源感兴趣,请点击下方或右方图片,注册登录后

搜索本页相关的【资源名】【软件名】【功能词】或有关的关键词,即可找到您想要的资源

如有其他疑问,请咨询右下角【在线客服】,谢谢支持!

优化 Android 事件分发性能:了解最佳实践和常见陷阱 (优化Android14及以上兼容性问题是什么意思) 第2张

发表评论

评论列表

  • 这篇文章还没有收到评论,赶紧来抢沙发吧~
欢迎你第一次访问网站!