![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Android 基础技术
文章平均质量分 68
我不勤奋v
这个作者很懒,什么都没留下…
展开
-
Android 基础技术——Framework
第一个原因,我们可以设想一下采用binder调用的话该怎么做,首先zygote要启用binder机制,需要打开binder驱动,获得一个描述符,再通过mmap进行内存映射,还要注册binder线程,这还不够,还要创建一个binder对象注册到serviceManager,另外。好处:应用在启动的时候需要做很多准备工作,包括启动虚拟机,加载各类系统资源等等,这些都是非常耗时的,如果能在zygote里就给这些必要的初始化工作做好,子进程在fork的时候就能直接共享,那么这样的话效率就会非常高。原创 2024-02-20 18:35:40 · 1057 阅读 · 0 评论 -
Android 基础技术——HashMap
你说说我们引入红黑树就是为了查找数据快,如果链表长度很短的话,根本不需要引入红黑树的,你引入之后还要付出代价维持它的平衡。而如果数组的长度n是2的x幂,当容量大小 n 为2的x次方时,n -1 的二进制的后几位全是1,在h为随机数的情况下,与n-1进行与操作时,会分布的更均匀。2)同时在扩容时,每个key需要重新确定自己在数组中的index,这时如果数组每个位置的元素都变了一次,显然开销会比较大。,那么0001,1001,1101等尾数为1的位置就永远不可能被entry占用,就造成了空间浪费。原创 2024-02-18 19:48:32 · 390 阅读 · 0 评论 -
Android 基础技术——Volatile 关键字
volatile变量通过这样的机制就使得每个线程都能获得该变量的最新值,即满足数据的“可见性”在生成汇编代码时会在volatile修饰的共享变量。进行写操作的时候会多出Lock前缀。3)当处理器发现本地缓存失效后,就。2)一个处理器的缓存回写到内存会。会从主内存中重读该变量数据。导致其他处理器的缓存失效。,即可以获取当前最新值。作用2: 防止指令重排序。1)Lock前缀的指令。会引起处理器缓存写回主。原创 2024-02-18 19:45:09 · 399 阅读 · 0 评论 -
Android 基础技术——Synchonized 关键字
当执行 monitorenter时,若对象未被锁定,或者当前线程已经拥有了此对象的monitor 锁,则锁计数器+1,该线程获取该对象锁。当执行monitorexit 时,锁计数器-1,当计数器为0 时,此对象锁就被释放了。在虚拟机器执行到monitorenter指令的时候,会请求获取对象的monitor 锁,基于monitor 锁又衍生出一个锁计数器的概念。区分一个方法是否同步方法。,是指当锁是偏向锁时,被另一个线程所访问,偏向锁会升级为轻量级锁,,还没有获取到锁,就会进入阻塞状态,该锁升级为重量级锁,原创 2024-02-18 15:57:46 · 369 阅读 · 0 评论 -
Android 基础技术——Binder 机制
MMAP 原理:让一块虚拟的内存指向一块已知的物理内存如文件,返回一个文件句柄。然后我们直接操作这个文件句柄就可以实现数据的一次拷贝。原创 2024-02-18 14:41:05 · 1063 阅读 · 0 评论 -
Android 基础技术——列表卡顿问题如何分析解决
发生内存泄露,会导致一些不再使用到的对象没有及时释放,这些对象占用了宝贵的内存空间,很容易导致后续需要分配内存的时候,内存空间不足而出现OOM(内存溢出)。无用对象占据的内存空间越多,那么可用的空闲空间也就越少,GC就会更容易被触发,GC进行时会停止其他线程的工作,因此有可能会造成界面卡顿。,避免了卡顿现象的发生。硬件加速能够更快地完成绘制操作,并且能够更好地应对复杂布局和过度绘制等问题,提供更好的用户体验。列表滑动时绘制操作就会交由GPU来处理,减少了CPU的负担,从而提升了滑动的流畅性。原创 2024-01-28 10:02:47 · 751 阅读 · 1 评论 -
Android 基础技术——m3u8格式与mp4格式的区别
由国际标准化组织(ISO)和国际电工委员会(IEC)下属的“动态图像专家组”(Moving Picture Experts Group,即MPEG)制定,第一版在1998年10月通过,第二版在1999年12月通过。m3u8准确来说是一种索引文件,使用m3u8文件实际上是通过它来解析对应的放在服务器上的视频网络地址,从而实现在线播放。,视频网站可以根据用户的网络带宽情况,自动为客户端匹配一个合适的码率文件进行播放,从而保证视频的流畅度。,mp4是封装好的h364或h365媒体文件。,是m3u的一种,只是。原创 2024-01-28 09:46:28 · 979 阅读 · 0 评论 -
Android 基础技术——Bitmap
要获取图片本身的大小,如果直接decodeResource加载一遍的话,那么就会增加内存了,所以官方提供了这样一个参数inJustDecodeBounds。所以一般在复用之前,还要判断下,新的Bitmap内存是不是小于可以复用的Bitmap内存,然后才能进行复用。bundle最常用于Activity间传递,也属于跨进程的一种方式,但是传递的大小有限制,,从而达到缩放图片的效果。,文件本身被放到一个共享内存中,然后获取到这个fd之后,只需要。将图片保存到文件,然后只传输文件路径,这样肯定是可以的,但是。原创 2024-01-28 09:43:59 · 1149 阅读 · 0 评论 -
Android 基础技术——Choreographer作用
下一个VSync到来时会执行TraversalRunnable-->doTraversal()--->performTraversals()-->绘制流程。虽然可以手动多次调用requestLayout,但是在一个vsync周期内,requestLayout只会执行一次。,保证绘制拥有完整的16.6ms,避免绘制的随机性。,当下一次vsync信号过来时,系统服务SurfaceFlinger在第一时间通知我们,应用层绘制可能随时发起,应用程序调用requestLayout发起重绘,请求同步vsync信号。原创 2024-01-27 10:26:36 · 486 阅读 · 0 评论 -
Android 基础技术——Handler
我们向主线程发送了一个UI绘制操作Message,而此时消息队列中的消息非常多,那么这个Message的处理可能会得到延迟,绘制不及时造成界面卡顿。同步屏障的删除:ViewRootImpl unScheduleTraversals---->removeSyncBarrier 删除屏障的节点。先判断 如果msg.target==null 轮询消息队列,直到找到一个异步消息为止,执行这个异步消息。刷新UI 使用了同步屏障就是为了保证及时执行消息,如果保证不了16ms 刷新一次, 会导致掉帧。原创 2024-01-27 10:21:33 · 1182 阅读 · 0 评论 -
Android 基础技术——RecyclerView
当mCachedViews满了以后,会利用先进先出原则,把旧的ViewHolder存放到RecycledViewPool中后移除掉,腾出空间,再将新的ViewHolder添加到mCachedViews中,最后剩下的ViewHolder都会缓存到终极回收池RecycledViewPool中,它是根据itemType来缓存不同类型的ArrayList<ViewHolder>,最大容量为5。二是:在滑动的时候,重复利用原来的ViewHolder,尽可能减少重复创建ViewHolder和绑定数据的工作。原创 2024-01-27 09:34:16 · 1462 阅读 · 0 评论 -
Android 基础技术——View 的宽高
当View树状态发生改变,或者View树内部的view的可见性发生改变时,onGlobalLayout会被回调,所以这也是获取宽高的一个很好的时机。利用 Handler 通信机制,通过post将添加一个 Runnable到message queue的队尾,当View初始化完成之后,Looper会调用此runnable,然后通知UI线程。因此可在第一次调用完后,移除监听事件。,也就是view完成layout之后,这个时候能第一时间获取宽高,MessageQueue里的消息处理的则是下一次loop到来的时候。原创 2024-01-21 17:48:14 · 1008 阅读 · 0 评论 -
Android 基础技术——addView 流程
设置DectorView的Parent为 ViewRootImpl 后续 view.requestLayout 都会触发 ViewRootImpl.requestLayout() 这里回答了DectorView是什么时候添加到Window的。ViewRootImpl 是 DecorView 的 parent,但是他并不是一个真正的 View,只是继承了 ViewParent 接口,用来掌管 View 的各种事件。Window:每个Activity都会创建一个Window用于承载View视图的显示,原创 2024-01-21 14:13:08 · 1531 阅读 · 0 评论