240 发简信
IP属地:北京
  • 120
    Fragment 知识梳理(3) - FragmentPagerAdapter 和 FragmentStatePagerAdapter 的数据更新问题

    一、概述 在上一篇文章中,我们通过源码的角度了解FragmentPagerAdapter和FragmentStatePagerAdapter的原理。这其实是为我们分析数据更新...

  • Android 腾讯 Matrix 原理分析(三):TracePlugin 卡顿分析之帧率监听

    前言 TracePlugin 卡顿分析插件中包含很多 Tracer,而 FrameTracer 负责监听帧率。拿到产生的帧率数据之后,根据用户设置的丢帧阈值进行报告。 那么 ...

  • 120
    Android 腾讯 Matrix 原理分析(二):TracePlugin 卡顿分析之主线程监听

    前言 接上文,我们首先来看 TracePlugin 卡顿分析的实现。TracePlugin 主要靠监视主线程的各种状态来分析是否卡顿,接下来我们开始吧。 前文传送门: And...

  • RecyclerView的复用

    RecyclerView的复用机制 前提 RecyclerView,即“熟悉”又“陌生”的控件。说起熟悉,是因为它频繁的使用在各个界面中,手机的竖直操作,需要大量的列表展示,...

  • android 子view 超出父view

    要实现这种效果,子view在父的之上,关键代码如下 主要用到的属性 1 、clipToPadding就是说控件的绘制区域是否在padding里面的,true的情况下如果你设...

  • 假设线程A和线程B并发执行getAndAddInt(),AtomicInteger中的value初始值为3;根据Java内存模型,线程A和线程B的工作内存中各自持有一份value的副本,值为3:

    1. 线程A通过getIntVolatile(o, offset)获取到其工作内存中的value值为3,然后线程A被挂起,线程B执行。

    2. 线程B通过getIntVolatile(o, offset)获取到其工作内存中的value值为3,运气好,线程B没有被挂起,继续执行compareAndSwapInt()比较,此时线程B的工作内存中value值仍为3,因此成功修改value为4,并返回true跳出循环。因为value被volatile修饰,修改的值4会立即写入主存,并且线程A的工作内存中value缓存值无效。

    3. 线程A恢复,继续执行compareAndSwapInt()方法,发现自己手里的值3(挂起前已获得)和其工作内存中的值4不一致(之前的缓存已失效,这个值是重新从主存中读取的),说明在此期间变量值已经被其它线程修改过了,返回false,并重新执行getIntVolatile(o, offset)获取内存中的value值。

    4. 线程A重新执行getIntVolatile(o, offset)获取工作内存中的value值为4,然后线程A没有挂起,继续执行compareAndSwapInt()进行比较,此时工作内存中的值仍为4,成功修改value值为5,并返回true跳出循环。

    个人理解应该是这种过程

    深入浅出CAS

    占小狼[https://www.jianshu.com/users/90ab66c248e6/latest_articles] 转载请注明原创出处,谢谢! 前言 CAS(Co...

  • 非静态内部类导致内存泄露问题详解

    内存泄露一直是Java开发中需要避免的问题,也是面试时经常考察的问题。使用非静态内部类是日常开发中最容易产生内存泄露的场景,本文主要探讨为什么使用非静态内部类可能产生内存泄露...

  • 120
    LayoutInflater.inflate()详解

    日常开发中,LayoutInflater的inflate()是我们经常使用的一个方法,同时也是面试中经常考察的一个知识点,它的作用是把一个xml布局填充成对应的View对象。...

  • SharedPreferences源码解析

    SharedPreferences是开发中很常见的一个类,它的主要作用是持久化本地的一些基础数据,方便我们做一些简单的业务判断。基础用法如下: SharedPreferenc...

  • 120
    Volatile和AtomicInteger

    Volatile 假设有这样一种情况,线程1通过一个flag控制线程2的运行如下图: 如果不对 做任何处理,那么就会产生可见性问题( ),即 对 值作出了改变, 的 却可能没...

  • Kotlin中label标签的使用

    以下内容参考这篇文章,仅做记录:http://www.liying-cn.net/kotlin/docs/reference/returns.html 你可能会好奇,对Kot...

  • 移动APP性能评测-流畅度评测

    为了提升流畅度,Google对Android系统进行了大量的优化,包括使用GPU进行硬件加速、引入VSYNC,把Dalvik换成art等。重点讲解FPS测量流畅度的不足,对测...

  • Android数据库源码分析(1)-getReadableDatabase和getWritableDatabase

    本系列主要关注安卓数据库的线程行为,分为四个部分:(1)SQLiteOpenHelper的getReadableDatabase和getWritableDatabase(2)...

  • 120
    Android Studio Debug调试详解

    日常开发中,我们难免会遇到BUG,如何快速的定位问题,发现问题尤为重要,这直接关系到我们开发的效率;所以我们必须要快速准确的定位问题,提高开发效率,并提升自己的代码质量;接下...

  • adb命令大全

    adb(android debug bridge),即Android调试桥,它是一种功能多样的命令行工具,用于建立开发环境和Android设备之间的连接,便于执行各种设备操作...

  • 当RecyclerView遇到Inconsistency detected崩溃时

    近来项目里,RecyclerView更新数据偶尔出现crash,错误日志如下: 遇到这类错误java.lang.IndexOutOfBoundsException: Inco...

  • Android 中内存泄漏的原因和解决方案

    前言 之前研究过一段时间关于 Android 内存泄漏的知识,大致了解了导致内存泄漏的一些原因,但是没有深入去探究,很多细节也理解的不够透彻,基本上处于一种似懂非懂的状态,最...

个人介绍
尘世中一个迷途小书童,读书太少,想得太多