- 博客(30)
- 收藏
- 关注
原创 Android进阶-Binder
Binder在Android进阶学习过程中,是无法忽视的存在,如果对它的原理和工作流程没有基础的认识,那么在进行Android源码和流程分析时,就会一知半解。本文先是介绍了Linux系统的IPC通讯的基础知识,然后从系统层面介绍了Binder的机制模型,Binder的优势,最后从用户层面,分析Binder的工作流程,结合两个层面的分析分析,相信大家对Binder机制已经大致的了解。
2024-02-26 16:45:57 903
原创 java虚拟机-线程安全与锁优化
这里写目录标题线程安全java中的线程安全线程安全的实现线程安全多线程访问对象时,如果不用考虑线程的调度和交替执行,不需要额外的同步(不需要调用方做额外的操作),调用这个对象的行为都能得到正确的结果,那么这个对象就是线程安全的。总而言之,代码本身封装了所有必要的正确性保障手段,无需调用者担心。java中的线程安全java语言把各种操作共享的数据分为五类:不可变,绝对线程安全,相对线程安全,线程兼容,线程对立。不可变:不可变的对象在多线程不存在不一致情况。如果共享数据是基本数据类型,则用final
2022-03-27 15:27:40 697
原创 java虚拟机-java与线程
java与线程java与线程线程的实现线程实现的三种方式java线程调度java与线程并发不一定依赖于多线程,例如php的多进程并发。但是java里的并发,多数与线程有关。线程的实现我们知道,进程是资源分配的基本单位,线程是cpu调度的基本单位。线程既可以共享进程的资源(内存地址,文件i/o等),又可以单独调度。主流操作系统都提供了线程实现,java语言则提供了在不同硬件和操作系统平台下线程操作的统一处理。每个java.lang.Thread类的实例就代表一个线程,其中关键方法都被声明为nati
2022-03-23 23:33:12 551
原创 java虚拟机-java内存模型与线程
java内存模型与线程java内存模型主内存和工作内存内存间的交互volatitle关键字可见性禁止指令重排long和double型变量的特殊规则原子性,可见性,有序性先行先发生原则java内存模型java虚拟机规范试图定义一种java内存模型来屏蔽掉各种硬件和操作系统的内存访问差异,实现java程序在各平台下都能达到一致的并发效果。c与c++直接使用物理硬件(操作系统的内存模型),因此需要针对不同平台编写程序。主内存和工作内存java内存模型的主要目标是定义程序中各变量的访问规则,即虚拟机中将变量
2022-03-22 22:50:52 4439
原创 java虚拟机-类加载机制
类加载机制类加载时机类加载过程加载验证准备解析类加载器类与类加载器双亲委派模型破坏双亲委派模型类加载时机从类被加载到虚拟机中开始,到卸载出内存为止,整个生命周期包括 加载,验证,准备,解析,初始化,使用,卸载七个阶段。验证,准备,解析这三个阶段统称为连接。加载,验证,准备,初始化这个五个阶段顺序是确定的,类加载过程必须按这种顺序开始(只是开始,不是进行或者完成,开始之后,可以交叉混合进行,通常会在一个阶段执行过程中,激活或者调用另外一个阶段),但解析阶段不一定,解析在某些情况下是在初始化之后才开始的(
2022-03-21 23:09:53 3262
原创 java虚拟机-垃圾收集器与内存分配
这里写目录标题垃圾回收机制对象已死引用计数算法根搜索算法引用的分类对象存活判断回收方法区垃圾回收算法标记-清除算法复制算法垃圾回收机制垃圾收集就是我们熟知的GC(Carbage Collection),为了达到更高的并发量,我们需要对这些自动化技术实施监控与调节。对象已死堆里几乎存有所有对象实例。垃圾回收对象前,首先需要判断对象是否还存活,这里有两种方法,引用计数算法和根搜索算法(可达性分析)。推荐对象分配的地方的博客https://blog.csdn.net/zhaohong_bo/arti
2022-03-19 11:52:25 2851
原创 Java虚拟机-内存区域
JVM内存区域概述运行时的数据区域线程私有内存区域程序计数器java虚拟机栈线程公有内存区域本地方法栈java堆方法区直接内存对象访问概述c和c++拥有内存管理的权利,而java则是通过虚拟机的自动内存管理机制去管理内存,不需要我们手动进行内存管理。自动内存管理机制不容易出现内存泄露问题,但是一旦出现内存泄露和内存溢出问题,排查问题就需要java虚拟的相关知识。运行时的数据区域这里借助一张书里的图片线程私有内存区域程序计数器程序计数器这个概念是在计算机组成原理课程中首次见到。在jvm里,程序
2022-03-15 18:12:32 1565
原创 Android群英传笔记-性能优化
性能优化布局优化Android Ui渲染机制布局优化避免 Overdraw优化布局层级使用< include>标签重用布局使用< ViewStub>实现延时加载布局优化工具内存优化内存简介获取Android系统内存信息内存回收Bitmap优化代码优化工具推荐布局优化Android Ui渲染机制人眼觉得流程的画面,需要达到40帧/s 到 60帧/s 。安卓中,系统通过 VSYNC信号触发对UI的渲染,重绘,间隔时间是16ms(1s显示60帧的时间)。所以,我们需要保证16ms内完
2022-03-14 18:15:58 784
原创 Android群英传笔记-Android系统安全与安全机制
Android系统安全与安全机制系统消息Android系统消息获取android.os.BuildSystemPropertyAndroid apk 应用信息获取PackageManagerActivityMangaer系统消息Android系统消息获取获取Android系统信息,代码中可以两个方面获取android.os.BuildSystem.Property。当然,也可以通过手机ADB来获取设备信息,在/proc目录中查看,或者使用getprop命令android.os.Build包含
2022-03-14 15:49:58 6165
原创 Android群英传笔记-Android绘图机制与处理技巧
这里写目录标题Android屏幕相关知识屏幕参数2D绘图xml绘图bitmapshape图层 Layer选择器 SelectorAndroid绘图技巧CanvasLayer图层Android图像处理-色彩特效Android图像处理-图形特效Android图像处理-画笔特效简介SurfaceView的使用Android屏幕相关知识屏幕参数屏幕大小:屏幕对角线长度,用寸来衡量分辨率:手机屏幕像素点个数,例如 720*1280PPI:每英寸像素,又称DPI.有一些固定的DPI,就是我们熟悉的dipi,m
2022-03-12 22:18:23 1530
原创 Android群英传笔记-Activity
Android群英传笔记-ActivityActivityActivity形态Activity生命周期Activity启动与销毁Activity停止与恢复Activity重新创建过程Android任务栈简介AndroidMainfest 启动模式intent Flag启动模式清空任务栈ActivityActivity是与用户交互的第一节课,它提供了一个用户完成指令的窗口。系统采用Activity栈的方式来管理ActivityActivity形态Activity拥有多种形态,可以在多种形态之间切换,以
2022-03-05 23:46:24 1001
原创 Android群英传笔迹-动画机制
Android群英传笔迹-动画机制视图动画-Animation实现原理优点与缺点视图动画-动画集合属性动画-AnimatorObjectAnimatorPropertyValuesHolderValueAnimator动画事件的监听AnimatorSet在xml中使用属性动画View的animate方法Android布局动画布局动画方式一布局动画方式二插值器 interpolators自定义动画SVG矢量动画机制SVG图形path标签Android中使用SVGVectorDrableAnimatedVec
2022-03-05 19:46:15 1302
原创 Android群英传笔记-Scroll分析
Android群英传笔记-Scroll分析坐标系安卓坐标系视图坐标系触控事件 MotionEvent常用动作view提供的获取坐标的方法坐标系安卓坐标系以屏幕左上角为原点,触控事件中的 getRawX(),getRawY(),得到的就是安卓坐标系坐标。视图坐标系描述的是子视图在父视图中的位置。以父视图左上角为原点。触控事件中的getX(),getY()就是获取视图坐标系的坐标。触控事件 MotionEvent常用动作单点触摸:按下,离开,移动,取消,出界多点触摸:按下,离开处理事件,一般
2022-03-03 16:37:42 578
原创 Android群英传笔记-ListView使用技巧
listview使用技巧小技巧使用viewHolder提高效率item间设置分界线隐藏滚动条取消item点击效果设置指定item动态修改listview处理空listViewlistView滑动监听listView常用扩展具有弹性的listView自动显示和隐藏布局的lsitview动态改变listView小技巧虽然现在recycleview基本取代了listView,但是一些属性还是相同的,可以使用recycleView时借鉴。关于Adapter,可以使用github上开源的BaseQuickAda
2022-03-01 23:47:38 471
原创 Android群英传笔记-View
ViewView知识点ui架构View的测量View的绘制自定义View扩展现有控件组合控件重写view的全新控件三级目录View知识点ui架构每个Activity都包含一个window对象-phoneWindow。phoneWindow将一个DecorView作为应用窗口的根View。DecorView作为窗口的顶层视图,封装了一些窗口操作的通用方法,将要显示的具体内容呈现在PhoneWindow上,所有View的监听事件,通过WindowMangerService接收,通过Activity对象来回
2022-03-01 23:19:19 427
原创 Kolin学习笔记十-kotlin与java互操作
Kolin学习笔记十kotlin与java可空性互操作性@JvmName@JvmFiled@jvmoverloads@jvmstatic异常捕捉函数类型操作kotlin与java可空性kotlin调用java代码,因为kotlin存在可空性,所以当java方法返回空,当kotlin调用时,可能会报错。这里有一个平台类型,例如 String!,代表可能为空,可能不为空重点:kotlin调用java ,一般加上?空安全操作符使用,或者使用notnull注解互操作性kotlin调用java 可以直接属
2022-02-27 20:00:40 510
原创 Kotlin学习笔记九-kotlin扩展函数与函数式编程
Kotlin学习笔记九扩展函数泛型扩展函数扩展属性可空类型的扩展函数infix关键字apply函数解析函数式编程变换mapflatmap过滤与合并过滤函数 filter合并函数 zip合并函数 fold序列为什么要函数式编程?扩展函数扩展可以在不直接修改类定义的情况下增加类功能,扩展可以用于自定义类,也可以用于List,甚至安卓的TextView等类。在实际项目目遇到就是扩展了viewBinding类的功能(获取输入框的值,绑定选择框等),使得对view的一些操作被剥离出去,多次被复用。减少了Acti
2022-02-27 19:13:09 679
原创 Kotlin学习笔记八-数据代理类型,接口与抽象类
Kotlin学习笔记八代理数据类型枚举类密封类三级目录代理数据类型代理数据类型:可以用来表示一组子类型的闭集。枚举类(相似对象的集合)就是一种简单的ADT。枚举类前面博客有介绍enum class Card {ACARD,BCARD,CCARD;}class Driver(var card:Card){fun checkCard():String{ return when(card){ Card.ACARD->"A card“ Card.
2022-02-27 16:36:29 460
原创 Kotlin学习笔记七-嵌套类,数据类,枚举类
这里写目录标题kotlin中的类嵌套类数据类枚举类解构声明运算符重载kotlin中的类嵌套类一个类只对另一个类有用,关键 在于只对。那么把该类嵌套进另一个类,这样写符合逻辑。eg class player(){ class equipment(){}}使用 可以直接player.equipment()进行实例化。player不一定要实例化,就是告诉我们,武器只对玩家有用,离不开玩家。数据类data class,提供了tostring的个性化实现(默认只打印主构造函数里
2022-02-06 18:53:11 1651
原创 Kotlin学习笔记六-继承与object关键字
Kotlin学习笔记六kotlin 类 继承注意类型检测类型转换超类kotlin object 关键字对象声明对象表达式伴生对象kotlin 类 继承一个类默认是final 的 不能被继承 除非使用open关键字 方法也是如此 只有用open 修饰 才能被重载。eg open class a(val S:String){open fun load()}//子类拥有构造函数b (val s:String,val v:String) :a(s){fun special()}除
2022-02-04 23:15:09 2075
原创 Kotlin学习笔记五-kotlin 类
Kotlin学习笔记五kotlin类属性类的构造函数主构造函数次构造函数初始化块kotlin类属性1-field对于kotlin,类的每一个属性都会产生一getter,一个setter,一个filed。filed不能定义,只是暴露给get和set使用。需要控制读写数据时,可以自定义getter和setter,来达到需求。get(),set()直接紧跟定义的变量egvar a=“jack”get()=filed.capesclip()set(value){field=…}get set也
2022-02-03 23:13:29 1809
原创 Kotlin学习笔记四-标准库函数与集合类
Kotlin学习笔记四标准库函数apply函数let函数run函数 与with函数also函数takeif函数集合类listset数组map标准库函数apply函数apply可以看做是一个对象的配置函数,隐式调用,返回配置好的对象eg//不使用applyfile:File=new File(“C://daxiong”)file.setReadable(true)file.setWriteable(true)//使用applyfile:File=new File(“C://daxiong”
2022-01-30 16:01:09 1558
原创 Kotlin学习笔记 三-kotlin可空性与字符串操作
kotlin学习笔记三kotlin可空性安全调用操作符 ?非空断言操作符 !!非空断言操作符 ?:三级目录kotlin可空性安全调用操作符 ?a?.函数 如果为空 则函数不执行 一般为该对象的自带函数 可以瀑布式调用 a?函数1?.函数2let 除了自带函数 还想做一些额外操作 例如对本对象操作,或者进行网络请求a.?let{//操作}虽然也可以if else 判断 但是安全调用操作符更加方便,简洁,例如支持瀑布调用。以后尽量使用操作符。非空断言操作符 !!非空断言操作
2022-01-30 13:15:07 1090
原创 handler全解
handler一,handler简介及其使用场景(1)handler简介(2)handler使用场景二,handler工作原理分析(1)handler工作流程(2)Message(3)Messagequeue1-普通消息2-同步屏障与异步消息3-阻塞与唤醒(pipe/epoll机制)(4)Looper1-ThreadLocal机制(5)IdleHandler介绍与使用场景一,handler常见问题分析(1)内存泄露问题(2)非ui线程操作view(3)View.post与handler.post的区别一,
2022-01-24 22:24:49 10053
原创 Kotlin学习笔记一-编码规范
类与对象的名称以大写字母开头并使用驼峰风格函数、属性与局部变量的名称以小写字母开头、使用驼峰风格而不使用下划线:常量名称(标有 const 的属性,或者保存不可变数据的没有自定义 get 函数的顶层/对象val 属性)应该使用大写、下划线分隔的名称格式化 代码缩进规范函数格式化,当参数过多时,懂得换行(一般两个参数一行,有共同意义)变量作用域问题,同类型函数应该集中(有一定联系或者共同),变量也是如此废代码的清理总而言之,代码必须清晰,容易阅读。类布局通常,一个类的内容按以下顺序排.
2021-11-08 16:14:20 230
原创 安卓学习-第四周-项目问题解决
一,app运行,debug版本没有问题,release出问题1,针对这个问题,一般会去考虑 代码混淆 问题,而这次遇到的却是由于getString()引起的类型异常。一个简单的接口请求,之前处理H 字段,一直是 jsonObject.getString(“H”),由于之前H字段一直传的是 String类型,所以都没出错。突然,一个接口,H字段传了 Int 进来,就会抛出一个类似于 “H” not a String之类的异常,最要命的是,debug版本是不会显示出来这个问题的,请求正常,但release就
2021-11-04 10:37:08 997
原创 学习安卓-第三周-拍照裁剪与perssionx的使用
拍照裁剪问题(1)首先是模板imgpath,uri,File这几种格式的转换。(2)调用系统相机拍照的startActivity问题。由于之前我们都是在activity中开始startActivity,所以在当前activity里进行onstartActivity是没有问题的,但是在frgment里调用,就存在不同(拿不到返回数据)。activity,frgmentActivity,fgment都可以进行startActivity,和onactivity的接收,只是,fragmentActiv..
2021-09-14 09:48:30 201
原创 学习安卓-第二周-代码优化
1. 代码优化(1)定义变量要时刻注意作用域。如果一个变量只在一个方法中使用,那就不需要设为全局变量,设为方法内的局部变量即可。(2)代码简洁。1,首先就是不创建无用的变量,例如View view=binding.getroot();return view; 如果这里view使用很少,甚至只有一次,那就没有创建的意义,浪费资源。直接return binding.getroot();。2,删除废代码(注释了的代码,多余的注释),使得代码美观3,变量命名规范,驼峰命名法,且名称不宜过长4,!!!代码
2021-07-26 10:34:44 128
原创 学习第一周-viewBinding
androidstudio的使用(1)当代码中进行变量替换工作的时候(例如视图绑定把textviw改为binding.textview的时候)。直接Ctrl+R进行替换,提升效率。最好不要直接replace all,一个一个的替换会防止一些同名片段被替代。(2)变量重命名时,例如把长变量xxxxxxBinding改为binding,首先不要逐一替换(吃力),也不要ctrl+R(这样没有考虑变量的使用的地方),安全的做法是 右击 refactor->rename,这样能把用到变量的地方,都改为新名称
2021-07-19 23:11:07 600
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人