android相关知识笔记

  Android 布局优化简述

 

影响应用的卡顿的四种场景:UI绘制、应用启动、页面跳转、时间响应

 

其中由两种根本原因导致:

界面绘制:

主要是绘制的层级深、页面复杂、刷新不合理。导致卡顿的场景出现在UI和启动后的初始页面以及跳转到页面的绘制上。

数据处理:

原因是数据处理量太大,分为三年中情况,1、数据处理在UI线程 2、数据处理过于复杂,导致主线程拿不到时间片 3、内存增加导致GC频繁导致卡顿

解决方案:

1、在页面非ui部分的逻辑处理尽量避免放在主线程中,例如算法逻辑和网络请求

2、ui布局优化:减少页面层级结构,合理使用RelativeLayout和Linerlayout、使用merge标签

     使用ViewStub(有需求需要展示不同页面,会员和非会员)但是ViewStub只会初始化一次,需要重复加载不同布局文件需求不适合。

    布局复用:例如TopBar布局可能会在多个布局中都存在,可以使用include标签。

               少用warp_content,这会在onMeasure导致计算成本提高

               少使用无用属性

 

HashMap属性简介

HashMap 是基于 Map 接口实现的一种键-值对<key,value>的存储结构,允许null 值,同时非有序,非同步(即线程不安全)。HashMap 的底层实现是
数组 + 链表 + 红黑树(JDK1.8 增加了红黑树部分)。

HashMap 定位元素位置是通过键 key 经过扰动函数扰动后得到 hash 值,然后再通过 hash & (length - 1)代替取模的方式进行元素定位的。HashMap 是使用链地址法解决 hash 冲突的,当有冲突元素放进来时,会将此元素插入至此位置链表的最后一位,形成单链表。当存在位置的链表长度 大于等于 8 时,HashMap 会将链表 转变为 红黑树,以此提高查找效率。


HashMap 的容量是 2 的 n 次方,有利于提高计算元素存放位置时的效率,也降低了 hash 冲突的几率。因此,我们使用 HashMap 存储大量数据的时候,最好先预先指定容器的大小为 2 的 n 次方,即使我们不指定为 2 的 n次方,HashMap 也会把容器的大小设置成最接近设置数的 2 的 n 次方,如,设置 HashMap 的大小为 7 ,则 HashMap 会将容器大小设置成最接近 7 的
一个 2 的 n 次方数,此值为 8 。HashMap 的负载因子表示哈希表空间的使用程度(或者说是哈希表空间的利用率)。当负载因子越大,则 HashMap 的装载程度就越高。也就是能容纳更多的元素,元素多了,发生 hash 碰撞的几率就会加大,从而链表就
会拉长,此时的查询效率就会降低。当负载因子越小,则链表中的数据量就越稀疏,此时会对空间造成浪费,但是此时查询效率高。
HashMap 不是线程安全的,Hashtable 则是线程安全的。但 Hashtable 是一个遗留容器,如果我们不需要线程同步,则建议使用 HashMap,如果需要线程同步,则建议使用 ConcurrentHashMap。

在多线程下操作 HashMap,由于存在扩容机制,当 HashMap 调用 resize()进行自动扩容时,可能会导致死循环的发生。我们在使用 HashMap 时,最好选择不可变对象作为 key。例如 String,Integer 等不可变类型作为 key 是非常明智的。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值