- 博客(951)
- 资源 (57)
- 收藏
- 关注
原创 (1)目录
一、编程基础[1-1] 编程基础之数据基础[1-2] 编程基础之数据结构[1-3] 编程基础之查找与排序[1-4] 编程基础之类笔试面试题[1-5]编程之美二、Java[2-1] Java之基本知识[2-2] Java之设计模式[2-3] Java之面试宝典三、J2EE[3-1] J2EE之基本知识四、Android[4-1] android之基本知识[...
2015-03-16 09:51:02 5883 2
原创 (4.1.29.2)ViewModel替代VC沟通者
对于简单的数据,Activity 可以使用onSaveInstanceState() 方法从 onCreate() 中的捆绑包恢复其数据,但此方法仅适合可以序列化再反序列化的少量数据,而不适合数量可能较大的数据,如用户列表或位图,使用ViewModel可以解决这个问题。
2023-11-23 20:05:53 786
原创 (4.6.15.4)Choreographer全解析
一、前情提要1.1 测绘流程的起点我们在4.1.37.1)深入理解setContentView过程和View绘制过程一文中,我们讲到了测绘流程的起点是在—ViewRoot类的requestLayout()方法—scheduleTraversals()—mChoreographer.postCallback(Choreographer.CALLBACK_TRAVERSAL, mTraversalRunnable, null)请求刷新信号—mChoreographer内部handler通过msg机
2021-05-13 12:26:21 403
原创 (4.1.10.8)Android Handler之同步屏障机制(sync barrier)
一、概述简单理解为 异步消息插队并优先执行。场景:排队买票先来了一个普通用户来排队,买完票走了。后面又来了一个VIP用户A来买票 就一直站在卖窗口这里 也不走(ps:添加屏障 )紧接者又来了一个普通用户C,再后面又来了VIP用户BVIP A 对VIP B 说,哥们不要排队直接来窗口买票,VIP B买完票走了,VIP A 被 某个哥们叫走了(移除屏障)这个时候终于轮到普通用户C买票了。二、系统应用简单的来说就是优于事件回调执行,为了做一些优先级更高的操作 比如 视图刷新。当一个Ha
2021-05-13 11:46:37 412
原创 (4.6.14.6)Android App Bundle动态化方案
文章目录一、Google减少应用包体积方案演进1.1 单APK时代1.2 Multiple APK1.3 Android App Bundle1.3.1 dynamic feature1.3.2 Split APKs(Android5.0)1.3.2.1 PackageInstaller1.3.3 Split APKs加载原理1.3.3.1 ClassLoader1.3.3.2 Resources1.3.3.3 不支持四大组件的新增1.3.3.4 多进程问题二、爱奇艺动态化框架Qigsaw2.1 背景知识2
2021-01-12 13:57:23 545
转载 (4.1.29.2)Jetpack新成员,App Startup一篇就懂
Android 11系统已经来了,随之而来的是,Jetpack家族也引入了许多新的成员。其实以后Android的更新都会逐渐采用这种模式,即特定系统相关的API会越来越少,更多的编程API是以Jetpack Library的形式提供给我们的。这样我们就不需要专门针对不同的系统版本去写很多的适配逻辑,而是统一用Jetpack提供的接口即可。Android也是在用这种方式去解决长期以来的碎片化问题。而今年的Jetpack家族当中又加入了两名重磅的新成员,一个是Hilt,另一个是App Startup。
2020-08-25 10:29:23 197
原创 (4.1.29.1)LiveData数据驱动者
一、概述简单地说,LiveData是一个数据持有类。它具有以下特点:数据可以被观察者订阅;能够感知组件(Fragment、Activity、Service)的生命周期;当数据变化时,只有在组件出于激活状态(STARTED、RESUMED)才会通知观察者有数据更新;文中提到的“组件”皆指实现了LifecycleOwner接口Fragment、Activity。1.1 为什么需要LiveData从LiveData具有的特点,我们就能联想到它能够解决我们遇到的什么问题。LiveData具有以
2020-08-20 17:10:13 205
转载 (4.0.22.12)Android AsyncListDiffer-RecyclerView最好的伙伴
自Android5.0以来,RecyclerView渐渐取代ListView成为Android开发中使用最多的列表控件,对于RecyclerView的使用相信大家都不陌生,但对于RecyclerView的高效刷新,却是很多人不知道的。简单粗暴的刷新方式Adapter.notifyDataSetChanged();这种方式想必是大家曾经用的最多的一种刷新Adapter的方式,它的缺点很明显:无脑刷新整个RecyclerView可视区域,每个item重绘,如果你的onBindVie..
2020-08-20 11:39:11 319
转载 (4.1.29)Android-Lifecycle详解
文章目录一、概念二、使用2.1 添加依赖:2.2 实现LifecycleObserver接口2.2.1 Java1.7使用LifecycleObserver2.2.2 Java1.8使用DefaultLifecycleObserver2.3 将LifecycleObserver添加到Lifecycle的观察者列表三、优势场景举例3.1 自定义生命周期函数+自己调用转发3.2 使用Lifecycle四、源码解析4.1 State状态 和 Event事件4.2 Activity/Fragment的生命周期触发s
2020-08-20 11:29:04 219
原创 (4.1.10.7)Android IdleHandler 原理浅析
问:什么是 IdleHandler?有什么用?怎么用?答:IdleHandler 可以用来提升性能,主要用在我们希望能够在当前线程消息队列空闲时做些事情(譬如 UI 线程在显示完成后,如果线程空闲我们就可以提前准备其他内容)的情况下,不过最好不要做耗时操作。具体用法如下。//getMainLooper().myQueue()或者Looper.myQueue()Looper.myQueue().addIdleHandler(new IdleHandler() { @Overrid.
2020-08-16 11:57:32 157
原创 (4.1.10.6)Handler是怎么做到消息延时发送的
1、postDelay()一个10秒钟的Runnable A-----消息进队----Loop消费---发现没有即时信息了----MessageQueue调用nativePollOnce()阻塞,Looper阻塞;2、紧接着post()一个Runnable B---消息进队----Loop消费---判断现在A时间还没到、正在阻塞,Handler把B插入消息队列的头部(A的前面),然后调用nativeWake()方法唤醒线程;3、MessageQueue.next()方法被唤醒后,重新开始读取消息链表,第
2020-08-16 11:26:32 137
转载 (2.1.4.1)刨根问底HTTP与WebSocket的关系
本文整理自简书作者“TheAlchemist”的技术文章,内容有修订。感谢原作者,原文链接在文末。 1、前言 本文的上篇《WebSocket详解(四):刨根问底HTTP与WebSocket的关系(上篇)》介绍了HTTP1.1协议的基本内容,这篇文章将继续分析WebSocket协议,然后对这两个进行简单的比较。 2、系列文章 本文是系列文章中的第5篇,本系列文章的大纲如下: 《WebSocket详解(一):初步认识WebSocket技术》...
2020-08-03 22:45:16 181
原创 (2.3.8)LRU算法四种实现方式介绍
RU全称是LeastRecently Used,即最近最久未使用的意思。LRU算法的设计原则是:如果一个数据在最近一段时间没有被访问到,那么在将来它被访问的可能性也很小。也就是说,当限定的空间已存满数据时,应当把最久没有被访问到的数据淘汰。一、实现LRU 1.用一个数组来存储数据,给每一个数据项标记一个访问时间戳,每次插入新数据项的时候,先把数组中存在的数据项的时间戳自增,并将新数据项的时间戳置为0并插入到数组中。每次访问数组中的数据项的时候,将被访问的数据项的时间戳置为0。...
2020-08-03 22:42:46 211
转载 (2.1.8.4)图解LinkedHashMap原理
1 前言LinkedHashMap继承于HashMap,如果对HashMap原理还不清楚的同学,请先看上一篇:图解HashMap原理2 LinkedHashMap使用与实现先来一张LinkedHashMap的结构图,不要虚,看完文章再来看这个图,就秒懂了,先混个面熟:LinkedHashMap结构.png2.1 应用场景HashMap是无序的,当我们希望有顺序地去存储key-value时,就需要使用LinkedHashMap了。 Map<St..
2020-08-03 22:29:50 167
转载 (2.1.8.2)图解HashMap原理(1.8之前)
1. 前言本文的源码是基于JDK1.7,JDK1.8中HashMap的实现,引入了红黑树,在后面的文章会写到。后面还有一篇LinkedHashMap的解析:图解LinkedHashMap原理。2. 使用与实现2.1 基本使用HashMap很方便地为我们提供了key-value的形式存取数据,使用put方法存数据,get方法取数据。 Map<String, String> hashMap = new HashMap<String, String>().
2020-08-03 22:28:44 137
转载 (4.1.21.9)HTTPS 加密过程演变分析
1、前言 可能有初学者会问,即时通讯应用的通信安全,不就是对Socket长连接进行SSL/TLS加密这些知识吗,干吗要理解HTTPS协议呢。这其实是个误解:当今主流的移动端IM数据通信,总结下来无外乎就是长连接+短连接的方式,长连接就是众所周之的TCP、UDP、WebSocket(WebSocket的本质还是TCP),而短连接就是HTTP/HTTPS了。即时通讯IM应用中,短连接的安全跟长连接相比,同样很重要。市面上的主流短连接通信方式,都已逐步从HTTP过渡到HTTPS了(iOS上的应用就更...
2020-07-27 10:44:12 254
转载 (4.1.21.8)HTTPS 加密算法 和 中间人攻击
1、引言随着互联网安全意识的普遍提高,对安全要求稍高的应用中,HTTPS的使用是很常见的,甚至在1年前,苹果公司就将使用HTTPS作为APP上架苹果应用市场的先决条件之一(详见:《苹果即将强制实施 ATS,你的APP准备好切换到HTTPS了吗?》)。所以,无论是即时通讯IM还是其它应用,在网络安全意识增强的今天,很多场景下使用HTTPS是肯定没错的。对于即时通讯IM的开发人员来说,长连接用TLS这没疑问,短连接用HTTPS也没问题,但我想问你一个最基础的面视问题:HTTPS到底用的是对称加密还是非对
2020-07-27 10:41:13 162
原创 (5.2.4)http请求过程
http请求过程可分为以下几个部分:建立TCP连接,浏览器向服务器发送请求命令,服务器应答,服务器关闭TCP连接以及浏览器接受到服务器响应的数据一、建立TCP连接在 HTTP 工作开始之前,Web 浏览器首先要通过网络与 Web 服务器建立连接,该连接是通过TCP来完成的,该协议与 IP 协议共同构建 Internet,即著名的 TCP/IP 协议,因此 Internet 又被称作是TCP/IP网络。HTTP 是比 TCP 更高层次的应用层协议,根据规则,只有低层协议建立之后才能进行更高层协议的连接.
2020-07-26 23:33:36 158
原创 (2.1.1.6)JVM之对象分配:栈上分配 & TLAB分配
文章目录一、栈上分配1.1 技术基础: 逃逸分析1.2 标量替换1.3 栈上分配示例1.4 JVM参数解析二、TLAB 分配2.1 分配策略2.2 JVM指令参考文献Java对象实例和数组元素都是在堆上分配内存的吗?答:不一定。满足特定条件时,它们可以在(虚拟机)栈上分配内存这和我们平时的理解可能有些不同。虚拟机栈一般是用来存储基本数据类型、引用和返回地址的,怎么可以存储实例数据了呢?这是因为Java JIT(just-in-time)编译器进行的两项优化,分别称作逃逸分析(escape ana
2020-07-26 23:05:24 202
原创 (2.1.8.6)ArrayList原理分析(重点在于扩容)
51 概述52 涉及过程521 规划质量管理522 实施质量保证523 控制质量53 输入输出54 工具技术541 规划质量管理 8542 实施质量保证 3543 控制质量 4 过程 输入 工技 输出 规划质量管理 项目管理计划、干系人登记册、风险登记册、需求文件、事业环境因素、组织过程资产 成本效益分析、质量成本、七种基本质量工具、标杆对照、实验设计、统
2020-07-26 22:09:11 117
原创 (2.3.15)Java的不可变类
61 概述611 项目经理必须具备的技能6111 人际关系技能 116112 领导风格与管理风格6113 权力6114 冲突612 项目团队工作分配与激励62 涉及过程621 规划人力资源管理622 组建项目团队623 建设项目团队624 管理项目团队63 输入输出64 工具技术641 规划人力资源管理 5642 组建项目团队 5643 建设项目团队 7644 管
2020-07-25 18:12:04 155
原创 (4.6.25.2)Android中为什么主线程不会因为Looper.loop的死循环卡死
线程中死循环本来就是没问题的,可以稳定运行ANR是由于Message执行超时卡死的Looper.loop的死循环其实是托管,实现了事件驱动,正常响应各种消费事件要完全彻底理解这个问题,需要准备以下4方面的知识:Process/Thread,Android Binder IPC,Handler/Looper/MessageQueue消息机制,Linux pipe/epoll机制。总结一下主要有3个疑惑:Android中为什么主线程不会因为Looper.loop()里的死循环卡死?.
2020-06-16 12:00:34 194
原创 (4.6.25.1)Android ANR监测方案解析
目录一、ANR的触发条件二、Android对ANR的监控机制三、应用ANR检测方案3.1 BlockCanary3.2 ANR-WatchDog3.3 SafeLooper3.4 FileObserver四、总结ANR(Application Not Responding),应用程序无响应,会严重影响用户体验。作为测试开发人员更深入的理解ANR原理,可以更好的针对各类卡顿性能问题制定对应的监控策略。本文简单总结了Android系统的ANR监测与现有的监测方案的原理对比。
2020-06-16 11:51:16 257
原创 (4.6.25)Android ANR源码原理分析
ANR即Application Not Responding,顾名思义就是应用程序无响应。在Android中,一般情况下,四大组件均是工作在主线程中的,Android中的Activity Manager和Window Manager会随时监控应用程序的响应情况,如果因为一些耗时操作(网络请求或者IO操作)造成主线程阻塞一定时间(例如造成5s内不能响应用户事件或者BroadcastReceiver的onReceive方法执行时间超过10s),那么系统就会显示ANR对话框提示用户对应的应用处于无响应状态。一
2020-06-16 11:42:18 334
原创 (4.6.10.3)Binder传输数据大小限制
61 概述611 项目经理必须具备的技能6111 人际关系技能 116112 领导风格与管理风格6113 权力6114 冲突612 项目团队工作分配与激励62 涉及过程621 规划人力资源管理622 组建项目团队623 建设项目团队624 管理项目团队63 输入输出64 工具技术641 规划人力资源管理 5642 组建项目团队 5643 建设项目团队 7644 管
2020-06-15 00:10:26 459
原创 (4.2.33)Google出品的Protocol Buffer
一概念1 Kotlin语言介绍11 Kotlin的优势12 Kotlin的不足2 开发工具支持21 Android Studio支持211 Android Studio 30以下版本配置212 Hello Kotlin213 转换Java to Kotlin22 云端IDE二准备开始1 基本语法11 定义包名12 定义函数13 定义变量和常量14 注释2习惯用语21
2020-06-11 10:51:08 156
原创 (15.1.23)Feed流设计
一概念1 Kotlin语言介绍11 Kotlin的优势12 Kotlin的不足2 开发工具支持21 Android Studio支持211 Android Studio 30以下版本配置212 Hello Kotlin213 转换Java to Kotlin22 云端IDE二准备开始1 基本语法11 定义包名12 定义函数13 定义变量和常量14 注释2习惯用语21
2020-06-05 16:51:08 503
原创 (4.1.15.3)子线程更新UI校验 viewRootImpl的checkThread
一概念1 Kotlin语言介绍11 Kotlin的优势12 Kotlin的不足2 开发工具支持21 Android Studio支持211 Android Studio 30以下版本配置212 Hello Kotlin213 转换Java to Kotlin22 云端IDE二准备开始1 基本语法11 定义包名12 定义函数13 定义变量和常量14 注释2习惯用语21
2020-06-05 15:56:46 1310
转载 (4.6.19.8)杀不掉的知乎 - 聊一聊 Android 的多任务保活
public class DisplayUtil { public static int dip2px(Context context, float dipValue){ final float scale = context.getResources().getDisplayMetrics().density; return (int
2020-06-05 15:28:42 448
原创 (4.6.10.2)Android LoadedApk详解
文章目录一、LoadedApk的构建函数和成员变量二、LoadedApk的在ActivityThread中的获取三、LoadedApk的mApplication创建Application实例四、LoadedApk的mResources创建Resources实例是ActivityThread中进行四大组件等启动过程中的重要中间变量LoadedApk对象是APK文件在内存中的表示。 Apk文件的相关信息,诸如Apk文件的代码和资源,甚至代码里面的Activity,Service等组件的信息我们都可以通过此
2020-05-30 18:11:51 3418
原创 (4.6.12)Android Resource详解
参考文献Android资源访问机制–getResource()Android插件化之-Resource Hook
2020-05-28 12:22:54 722
转载 (4.1.10.5)ThreadLocal原理
什么是ThreadLocal?如果你从字面上来理解,很容易将ThreadLocal理解为『本地线程』,那么你就大错特错了。首先,ThreadLocal不是线程,更不是本地线程,而是Thread的局部变量,也许把它命名为ThreadLocalVariable更容易让人理解一些。它是每个线程独享的本地变量,每个线程都有自己的ThreadLocal,它们是线程隔离的。接下来,我们通过一个生活案例来开始理解ThreadLocal。一、使用场景 场景1:每个线程需要一个独享的对象,通常是工.
2020-05-27 11:15:54 157
原创 (4.0.22.9)RecyclerView中的itemView的Move事件被Cancle
一概念1 Kotlin语言介绍11 Kotlin的优势12 Kotlin的不足2 开发工具支持21 Android Studio支持211 Android Studio 30以下版本配置212 Hello Kotlin213 转换Java to Kotlin22 云端IDE二准备开始1 基本语法11 定义包名12 定义函数13 定义变量和常量14 注释2习惯用语21
2020-05-24 17:46:46 527
原创 (4.0.22.8)RecyclerView的空白区域点击响应
一概念1 Kotlin语言介绍11 Kotlin的优势12 Kotlin的不足2 开发工具支持21 Android Studio支持211 Android Studio 30以下版本配置212 Hello Kotlin213 转换Java to Kotlin22 云端IDE二准备开始1 基本语法11 定义包名12 定义函数13 定义变量和常量14 注释2习惯用语21
2020-05-24 15:01:46 2861 4
转载 (1.2.5.10)30张图带你彻底理解红黑树
编辑推荐:稀土掘金,这是一个针对技术开发者的一个应用,你可以在掘金上获取最新最优质的技术干货,不仅仅是Android知识、前端、后端以至于产品和设计都有涉猎,想成为全栈工程师的朋友不要错过!原文:RecyclerView: Grid with headerGridView和ListView有许多的相似之处,不过也有一个显著的不同:没有header和footer。现在它们两者都可以
2020-05-24 01:24:06 738
原创 (2.1.8.1)Hashtable源码分析
一、参考文章 原文地址:Tasks and Back Stack 本地地址:Java代码.\android-sdk-windows\docs\guide\topics\fundamentals\tasks-and-back-stack.html二、术语解释 1.task:一系列
2020-05-24 01:02:37 760
原创 (4.0.23.11)Viewpager与FragmentStatePagerAdapter重刷数据引发的源码分析和原生缺陷解决方案
文章目录一、问题二、源码分析2.1ViewPager#dataSetChanged2.1.1 ArrayList.ViewPager.ItemInfo. mItems2.1.2 Adapter.getItemPosition(ii.object)2.3 什么时候触发PagerAdapter#instantiateItem2.3.1 populate()2.4 FragmentStatePagerAdapter解决方案方案一:不可行方案二:可行方案三:可行参考文献一、问题public class Feed
2020-05-23 14:50:58 284
原创 (4.0.23.10)源码分析已嵌套的Fragment遇到ViewPager
近期在修改页面结构过程中,遇到了一个特殊的问题,现在做个总结。一、背景介绍先说下Feed首页的页面结构,为了满足运营多种动态化的需求,Feed首页采用了以下图所示的页面结构,从页面到最小粒度的控件可以分成5个层级HomePageActivity负责解析跳转参数、页面埋点、初始化等相关逻辑TabContainerFragmentHomepage真正的界面主体是通过该Fragment去承载的,内部是可以切换的一个tablayout;满足了运营对“HP上的tabs可以动态配置,灵活添加”
2020-05-23 14:37:51 825
原创 (14.1.2)小程序
踩坑块元素width的默认值是父元素的100%,一般情况下不用设置就可以满足需求。height的默认值是里面内容的高度,也就是auto,一般写代码的时候也不需要给元素设置高度,如果设置了高度而且设置的高度不够的时候,就会出现元素重叠的情况重叠外面一层 position:relative;里面的 position:absolute 就可以高度设置50%时是有问题的,此时可以使...
2020-05-22 19:01:44 182
安阳工学院--软件工程复习指南
2012-11-16
软件工程试卷及答案(多套精品试卷_).
2012-11-16
进程保活(一:JNI层初探):单向循环式启动服务
2016-07-23
会议室系统jsp课程设计
2012-12-04
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人