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

颍泉网站建设指数计算器

颍泉网站建设,指数计算器,百度系优化,哪些网站容易做seo优化任何Android应用都需要UI跟用户交互.UI是否好坏更是直接影响到用户的体验.如今UI的优化视乎是应用开发中一个绕不过去的话题。所以本篇文章小编带大家全面了解Android ui优化的主要知识和优化方法。 一、UI优化 UI优化知识点主要分为三部分#xff1a; 第一部分#xff0c…任何Android应用都需要UI跟用户交互.UI是否好坏更是直接影响到用户的体验.如今UI的优化视乎是应用开发中一个绕不过去的话题。所以本篇文章小编带大家全面了解Android ui优化的主要知识和优化方法。 一、UI优化 UI优化知识点主要分为三部分 第一部分系统为我们做的优化。由于前端中UI展示的特殊性和重要性Android团队也是在不断想办法提高UI方面的渲染速度所以也是更新了很多系统优化方案比如 硬件加速、黄油计划、RenderThread。 第二部分我们可以具体实施的优化方案。主要包括 java代码布局、View重用、异步创建View、xml布局优化、异步布局框架Litho、屏幕适配、Flutter、Jetpack Compose 第三部分工具使用主要包括 Choreographer、monitor、Systrace 1.1 系统做的优化 1.1.1 硬件加速 之前我们说过一个图形的绘制是CPUGPU和屏幕三方合作的结果。 在Android3.0之前还没有硬件加速都是通过CPU进行数据计算然后通过Skia库进行软件绘制但是CPU对于图形处理并不高效。 于是从3.0开始Android支持了硬件加速到Android4.0默认开启硬件加速。 开启硬件加速后就是由CPU进行图形缓存数据的绘制。这样CPU和GPU就能比较好的分工各司其职了。CPU用于控制复杂绘制逻辑、构建或更新DisplayList基础元素GPU用于完成图形计算、渲染DisplayList基础元素。 但是硬件加速也是有缺点的 启用硬件加速需要更多资源因此应用会占用更多内存。 比较低的版本由于有些Canvas API还没有支持所以使用硬件加速可能会有问题。那么我们就可以手动关闭某个view的硬件加速 myView.setLayerType(View.LAYER_TYPE_SOFTWARE, null)Project Butter 黄油计划你有可能没怎么听说但是其实之前两章内容都提到过Android4.1之后Google提出了黄油计划主要包括两个内容 VSYNCTriple Buffering(三重缓存) 这些都熟悉了吧上两节都说过的这里再简单提一下 VSYNC 垂直同步信号每当收到这个信号后CPU就开始准备Buffer数据并在16ms之内和GPU把屏幕需要的缓存数据准备好。 Triple Buffering(三重缓存) 在Android4.1之前是双缓存机制大部分是没问题的。但是当CPU/GPU绘制过程较长超过一个vsync信号周期一般是16ms就会导致丢帧CPU无法使用被GPU或者屏幕占用的缓存区。如果下一帧绘制如果又超时那么又会丢帧。 所以再加上一个缓存区这样CPU、GPU、Display三者都有各自的缓存区互不影响就能保证时间的最大化利用也就能减少上述的情况了。 RenderThread RenderThread是在Android5.0提出的从这个名字就能知道它是一个线程一个专门执行GL命令的线程也就是一部分的绘制工作。 有了它之后当CPU处理数据给GPU后就不需要等GPU渲染完毕了而是将一些绘制任务交给RenderThread这样就能减少主线程的工作保证画面的流畅。同时还提供了RenderNode用来做view的属性封装渲染帧的信息等等。 1.2 优化方案 1.2.1 java代码布局 我们一般都是用XML文件进行布局但是XML解析也是很耗时的并在这个解析过程在主线程进行。 所以我们有的时候也许可以通过Java代码或者kotlin进行View的创建 理论中这样确实能减少布局加载的消耗时间但是Java代码创建View太麻烦了而且无法可视化。 当然也有一些库可以帮助我们将xml代码转换成java代码比如X2Cgithub.com/iReaderAndr… 但是它并不支持所有的情况比如merge标签appCompat兼容控件等等。 所以我们需要在这之中找到平衡点有的时候UI简单并且要求高性能的前提下我们可以试试用这样的方法即用java代码代替XmL代码。 new AsyncLayoutInflater(MainActivity.this).inflate(R.layout.activity_main, null, new AsyncLayoutInflater.OnInflateFinishedListener() {Overridepublic void onInflateFinished(NonNull View view, int i, Nullable ViewGroup viewGroup) {//回调给主线程setContentView(view);} });1.2.2 View重用 参照Recyclerview的做法我们也可以将一些常用的view保存到缓存池中这样在不同的界面中就能复用缓存池里面的view。 1.2.3 异步创建view 这是Google提出的一个方案——AsyncLayoutInflater。它可以异步加载布局文件并且回调给主线程从而减少主线程耗时。简单贴下主要代码 new AsyncLayoutInflater(MainActivity.this).inflate(R.layout.activity_main, null, new AsyncLayoutInflater.OnInflateFinishedListener() {Overridepublic void onInflateFinished(NonNull View view, int i, Nullable ViewGroup viewGroup) {//回调给主线程setContentView(view);} });1.2.4 xml布局优化 在写xml布局文件的时候我们要做的也有很多比如 减少布局嵌套。多使用ViewStub、Merge、ConstraintLayout来代替。 优化开销。RelativeLayout和 使用weight的LinearLayout 开销比较大建议使用ConstraintLayoutLinearLayout代替。 1.2.5 异步布局框架Litho Litho是Facebook开源的一款在Android上高效建立UI的声明式框架。 主要有以下特点 1声明式它使用了声明式的API来定义UI组件。 2异步布局它把 measure 和 layout 都放到了后台线程只留下了必须要在主线程完成的 draw这大大降低了 UI 线程的负载 3视图扁平化由于 Litho 使用了自有的布局引擎Yoga)在布局阶段就可以检测不必要的层级、减少 ViewGroups来实现 UI 扁平化。 4优化 RecyclerViewLitho 还优化了 RecyclerView 中 UI 组件的缓存和回收方法。 1.2.6 屏幕适配 关于屏幕适配问题也是老生常谈了。主要有以下几种方案 dp适配方案。 这是系统自带的适配单位dp是基于屏幕物理分辨率一个抽象的单位用于说明与密度无关的尺寸和位置。所以它能在不同分辨率的手机上有相对大小的适配性。计算公式是pxdp * (dpi/160)。但是dpi有可能会被人为调整比如几部相同分辨率不同尺寸的手机的ppi可能分别是是430,440,450,那么在Android系统中可能dpi会全部指定为480所以还是有可能在一些设备上出现适配问题。 宽高限定符适配方案。 简单地说这个方案就是穷举市面上所有的Android手机的宽高像素值。然后找到对应的文件夹使用下面的资源文件所对应的px值。 但是这方案有个缺陷就是必须精确命中才行。比如1920x1080的手机就一定要找到1920x1080的限定符否则就只能用统一的默认的dimens文件了。 所以容错性太低不推荐。 smallestWidth适配方案。 这个方案就是通过手机的宽度值来找到对应限定符文件夹下的资源文件可以看做宽高限定符屏幕适配方案的升级版。 假如我们的设计图宽为360dp那么就创建values-sw360dp文件夹并添加资源文件 ?xml version1.0 encodingUTF-8? resourcesdimen namedp_11dp/dimendimen namedp_22dp/dimendimen namedp_33dp/dimen...dimen namedp_359359dp/dimendimen namedp_360360dp/dimen /resources很简单分为360份然后我们实际写布局文件的时候直接引用对应的dimen值即可。 然后新建其他设备宽度的文件夹并在每个文件夹里添加对应的资源文件这里以400dp为例 ├── src/main │ ├── res │ ├── ├──values │ ├── ├──values-sw320dp │ ├── ├──values-sw400dp │ ├── ├──... │ ├── ├──values-sw640dp?xml version1.0 encodingUTF-8? resourcesdimen namedp_11.1111dp/dimendimen namedp_22.2222dp/dimendimen namedp_33.3333dp/dimendimen namedp_44.4444dp/dimen...dimen namedp_359398.8889dp/dimendimen namedp_360400.0000dp/dimen /resources也就是说所有的设备都分为360份了这样就能保证在不同宽度设备上都能有差不多的效果。 如果我们的设备宽度为400dp那么就会调用values-sw400dp对应的资源文件如果找不到就会向下查找。比如我们宽度是402dp找不到对应的就会向上找到400dp对应的资源文件所以也有比较好的容错性。也是一个比较好的适配方案。 当然这种重复性工作肯定不需要我们自己手动去实现有专门的插件可以生成相应的文件和文件夹。 今日头条适配方案。 这个大家应该都很熟悉了主要是通过动态修改density值来保证所有设备的屏幕宽度都是固定的dp值。用到的公式就是px density * dp。 比如设计图宽为360dp我们只要保证所有设备的宽度都是360dp就能适配了。而宽度的px值我们是已知的所以就是要修改这个 density 值来完成我们的适配目的。具体代码我就不贴了网上很多。 这种方案侵入性低使用方便是个不错的适配方案。 1.2.7 Flutter Flutter是 Google 推出并开源的移动应用开发框架开发者可以通过 Dart 语言开发 App一套代码同时运行在 iOS 和 Android 平台。 Flutter框架现在也是特别火实际运用到很多的大厂项目比如闲鱼今日头条。它相对于Android其实是另外一套APP架构了它没有基于系统本身的渲染引擎而是app中自带Skia引擎虚拟机也是使用的Dart虚拟机。 主要有以下几个特点 跨平台现在flutter至少可以跨5种平台常见的平台MacOS,Windows ,Linux ,Android ,iOS ,到目前为止Flutter算是支持平台最多的框架了。良好的跨平台性大大减少了开发成本。 丝滑般的体验使用Flutter内置的Material Designandroid风格和Cupertinoios风格风格组件以及丰富的motion API,平滑而自然的滑动效果和平台感知为用户带来全新的体验。 响应式框架使用一系列基础组件和响应式框架可以轻松构建用户界面。使用功能强大且灵活的API可以实现复杂的界面效果。 支持插件使用插件可以访问平台本地API,如相机蓝牙WIFI等等。借助现有的Javaswift ,object c c代码实现对原生系统的调用。 60fps超高性能Flutter编写的应用可以达到60fps(每秒传输帧数)。Flutter采用GPU渲染技术所以性能很好。完全可以胜任游戏开发。 1.2.8 Jetpack Compose Jetpack Compose 是用于构建原生 Android 界面的新工具包 原来我们的布局文件都是写在xml文件中的现在提供了一种新的view构建方式也就是Compose。 它是一种声明式UI不再使用xml而是使用kotlin进行UI布局。其实就跟我们之前提到的一点用java代码去构建view一样的效果。这样就减少了xml解析的时间提高了效率。 声明式UI。指的是只需要把界面声明出来不需要手动更新。比如我们这里的Compose只需要写一遍后续的UI改变会随着变量自动更新。而传统的xml布局方式就无法做到这一点属于命令式UI需要我们手动命令纸牌屋UI的修改。 官方也是宣称有以下几点优势 更少更直观的代码更强大的功能能提高开发速度。 最后贴一段代码感受下Compose的写法 class MainActivity : AppCompatActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContent {Greeting(Android)}} } ​ Composable fun Greeting(name: String) {Text (text Hello $name!) }1.3 工具篇 1.3.1 Choreographer Choreographer其实也是一个监控应用帧率的工具。它主要有以下特性 能获取整体的帧率。能在线上使用。获取的帧率几乎是实时的。 主要原理就是利用postFrameCallback计算两次绘制的间隔时间简单贴下代码 private long mLastFrameTime; Choreographer.getInstance().postFrameCallback(new Choreographer.FrameCallback() {Overridepublic void doFrame(long frameTimeNanos) {if (mLastFrameTime 0) {mLastFrameTime frameTimeNanos;}float diff (frameTimeNanos - mLastFrameTime) / 1000000.0f;//得到毫秒正常是 16.66 msif (diff 500) {double fps (((double) (mFrameCount * 1000L)) / diff);mFrameCount 0;mLastFrameTime 0;Log.d(doFrame, doFrame: fps);} else {mFrameCount;}Choreographer.getInstance().postFrameCallback(this);} });1.3.2 LayoutInspector/Android Device Monitor LayoutInspector是AndroidStudio种的一个布局检查器可以通过Tools Layout Inspector找到他可以检查应用中的某个界面的视图结构但是无法查看非调式状态的应用。 如果要看其他应用的布局情况可以使用Android Device Monitor在Android Studio 3.1 以后需要单独从文件夹打开了 android-sdk/tools/monitor1.3.3 Systrace Systrace是分析Android性能问题的神器获取Systrace文件的方式有两种 一是AndroidSDK/tools目录下通过monitor.bat用Android Device Monitor可视化工具得到。 二是通过python脚本获取。 以上就是关于UI优化的详细内容希望对大家有所帮助。更多关于Android性能优化的知识可参考App性能优化手册。
http://www.hkea.cn/news/14448956/

相关文章:

  • 网站权重不够高 导致做网站的图片传进去很模糊
  • 织梦网站seo建站网址平台
  • 网站建设 网页开发网站收录时有时没有
  • 深圳网站设计公司专业吗asp网站表格代码
  • 网站排名优化培训课程如何建个人网站流程
  • wordpress动态标题百度seo和sem
  • 什么网站做一手项目好页面设计在哪里找
  • 深圳网站制作公司排名宁波企业网站优化推广
  • 河北建设局网站成都必去的地方排行
  • 南宁建网站必荐云尚网络如何制作响应式网站
  • 自贡网站建设公司集团网站建设费用
  • 如何 套用模板做网站如何加强网站管理的队伍建设
  • 自己公司网站维护织梦网站图标
  • 北京制作网站公司排名工艺品外贸订单网
  • 做网站推广员需要宁德市路桥建设有限公司网站
  • 长沙专业网站建设团队做PPT的网站canva
  • 如何做网站编辑 沒技术三亚兼职招聘信息网站
  • 网站类型分类一个好网站
  • 泉州网站建设方案维护网站建设方案计划书
  • 上海网站设计首选刻seo零基础入门到精通200讲
  • 租用网站服务器价格wordpress同步腾讯微博
  • 广告图案大全图片常德seo优化
  • 网站建设谈客户说什么jquery网站
  • 网站开通微信支付收费企业微信app下载安装官方最新版
  • 分布式加载网站的静态做网站虚拟主机好还是
  • 浙里建官方网站初中学校网站如何做
  • 厦门外贸网站建设百度上广告怎么搞上去的
  • 做第三方网站注意什么晋中学院教务网络管理系统
  • 东阳市网站建设制作wordpress首个段落摘要
  • 网站建设需要掌握什么技术自己做广告用什么软件