- 博客(54)
- 收藏
- 关注
原创 ClassLoader基础
ClassLoder类型BootClassLoader主要加载Android SDK中的class文件,如Activity.classPathClassLoader主要加载应用的class文件,如:MainActivity.classDexClassLoader主要是加载用户自定义的class文件,如插件化加载data/data目录下的apk文件PathClassLoader和DexClassLoader的区别 DexCla...
2021-07-28 16:41:36
197
原创 Dalvik和ART
什么是DalvikDalvik是适用于Android平台的java虚拟机,支持.dex格式的java应用程序运行。什么是ART Android Runtime,Android4.4提供的一种与Dalvik完全不同的运行时环境,在5.0以及以上的版本默认是ART环境。在应用安装的时候,预编译字节码到机器码,这种机制叫做AOT(Ahead Of Time),应用安装会变慢,但是运行效率会更高。Dalvik和ART的区别1.Dalvik在运行时,需要解释执行,常...
2021-07-28 10:05:19
315
原创 JVM垃圾回收
GC如何判断对象的存活引用计数法 对象之间有引用,那么引用计数+1,引用消失,引用计数减一,引用计数为0的时候,对象可以释放。 如果是相互引用的对象,无法释放,例如:A引用B,B引用A,他们的引用计数都是2,把A指向null,B指向null,引用计数都只能减一。可达性分析 从GC Roots出发,判断对象是否可达。如果创建A:Object a = new Object(),B:Object b = new Object(),a=b,此时是把...
2021-07-27 22:47:24
176
原创 运行时数据区
程序计数器 线程私有的,随着线程创建和销毁。指当前线程正在执行的字节码地址(行号)。Java是多线程的,意味着有线程切换,确保多线程下程序能够正常执行。虚拟机栈 线程私有的,随着线程创建和销毁。 为什么使用栈结构,因为符合方法间的调用,例如:A方法调用B,B调用C,最后是C结束,B结束,A结束,先进后出的顺序。 每个方法执行的时候,会创建一个帧栈,帧栈可以分为:局部变量表,操作数栈,动态链接,返回地址。...
2021-07-27 15:06:49
92
原创 线程池和阻塞队列
阻塞队列add/remove如果队列满了,add(T)会抛出异常如果队列为空,remove()会抛出异常offer/poll如果队列满了,offer(T)会返回false如果队列为空,poll()会返回nullput/take如果队列满了,put(T)会阻塞如果队列为空,take()会阻塞常用的阻塞队列LinkedBlockingQueue...
2021-07-26 22:24:49
505
原创 线程间的共享和协作
synchronizedsynchronized是内置锁,分为对象锁和类锁。可以用于方法,代码块中。如果是方法,锁的是this对象,如果是代码块,锁的是指定的那个对象。类锁其实是一个不太准确的说法,应用于静态方法,本质上锁的是该Class对象等待和通知的标准范式等待方获取对象锁 检查条件,条件不满足,调用对象wait 执行业务代码synchronized(对象){ while(不满足条件){ 对象.wait();}...
2021-07-26 10:35:24
79
原创 线程中断的方式
stop()强制中断线程,可能导致线程中的资源没有释放,比如在try-catch-finally中释放资源,直接中断,不会调用finally块。new Thread().interrupte() 协作式的中断线程,不会强制中断线程,会发一个interrupt的信号,线程run方法中,如果有Thread.sleep()或者wait,捕获了InterruptedException,会命中该catch, 重置interrupt标记位,如果需要处理该标记位,需要显示调用interrupt...
2021-07-25 13:06:36
206
原创 多线程基础知识
进程和线程的区别进程是操作系统资源分配的最小单位,包括CPU,磁盘io。一个app是一个进程,四大组件可以在清单文件中通过process指定所在进程。Android中启动一个进程,会创建一个主线程,即ui线程。线程是CPU调度的最小单位,会共享进程中的所有资源,java多线程是通过CPU时间轮转机制实现的。并行和并发 并行是同时执行,比如4核8线程,并行数为8 并发是跟时间有关,指单位时间内,执行的数量。java中是通过CP...
2021-07-25 11:14:37
176
2
原创 java静态代理和动态代理
代理模式三大角色抽象接口:声明了真实对象和代理对象的公共接口代理对象:包含真实对象,用户访问的是代理对象,代理对象再访问真实对象真实对象:提供真正的能力静态代理的问题静态代理一般是一对一的形式,如果要新增真实对象类型,那么需要修改代理对象,违反了设计模式中的开闭原则动态代理在运行时创建代理对象,新增真实对象,只需要设置真实对象,然后动态创建代理对象即可。例子public interface IFactory { void sale();}...
2021-07-24 22:49:56
83
原创 java反射
获取Class对象的方式Test test = new Test();Class class1 = Test.class;Class class2 = test.getClass();try { Class class3 = Class.forName("com.example.myapplication.test.Test");} catch (ClassNotFoundException e) { e.printStackTrace();}//方式4try { Cl
2021-07-24 19:00:10
108
原创 java泛型
好处规定集合的类型,只能传入改泛型限定的类型,避免强转 多个类型,执行相同逻辑的代码,避免多次重载。泛型接口子类实现泛型接口,可以指定它也是泛型 class B<T> implement A<T> 子类实现泛型接口,直接implement A<String>泛型方法指定泛型方法接受的参数和返回值,public <T> T genericMethod(T t){} 泛型方法在调用的时候,可以省略<T>, a.<String
2021-07-24 17:19:08
129
原创 拿到别人用过的电脑,如何修改成自己的git
1.添加ssh keyssh-keygenpassphrase可以为空查看public keycat ~/.ssh/id_rsa.pub将public key复制到后台网站中,add push key2.修改git config配置git config --global user.name 'yourName'git config --global u...
2019-11-01 17:43:26
1599
原创 遇到ANR如何处理
导出traces文件adb shellcd data/anrlsexitadb pull traces.txt "你自己的目录"用notePad ++ 打开Ctrl + F搜索关键字"main"找到被block的地方,这里是0x00347131,Ctrl+F搜索然后就大概能知道是代码哪里出问题啦...
2019-10-21 17:01:20
447
原创 handler消息和delay消息的工作机制
做Android开发的同学,应该都用过hanlder,具体的场景比如:在一个子线程中,做耗时操作,然后通过handler.sendMesssage发送消息到主线程,更新ui,有时也通过handler.sendMessageDelay,发送一条延时消息,那有没有思考过sendMesssage和sendMessageDelay内部是如何处理消息的?假设发送一条延时消息,马上发送一条正常消息,延时消息会...
2019-09-30 16:41:40
1445
原创 view.post是如何保证获取到view的真实宽高的
讲解前,首先看一个handler使用的例子 Handler handler1 = new Handler() { @Override public void handleMessage(Message msg) { Log.d("handler", "handler 1 execute"); try { Thread.sleep(2000); ...
2019-09-29 18:32:49
623
1
原创 别名现象
别名现象别名现象,是java操作对象的一种基本方式解释原本t1包含的对对象的引用,是指向一个值为9的对象,在对t1赋值为t2的时候,这个引用被覆盖了,t1和t2同时指向了值为47的对象,也就是t1,t2包含的是相同的引用,指向同一个对象....
2019-09-23 21:44:09
241
原创 用androidStudio打开github源代码的正确姿势
用androidStudio打开github源代码的正确姿势阅读好的github源码,是一个android工程师进阶到高级工程师捷径,看大牛写的代码,自己也会有很大的收获但是很多时候,我们执行运行下载后的源码,发现并不能运行成功,下面我将介绍一种最简单的,让as编译通过github下载的源码clone github源码直接把压缩包下载到本地,然后解压...
2019-09-10 23:12:32
3573
2
原创 WebStrom配置React-Native开发环境
WebStrom配置React-Native开发环境1.配置语法打开file->settings->Languages&Frameworks->JavaScript->React JSX2.下载react和react-native库打开settings->Languages&Framewor...
2019-07-23 14:02:13
1138
原创 React-Native开发技巧
React-Native开发技巧1.React-Native环境搭配,组件 https://reactnative.cn/docs/props/ React-native中文网2.使用vs code开发js相关的代码,安装插件: Path Intellisense:文件路径提示补全 React Nat...
2019-07-22 14:26:43
335
原创 Android Lottie的简单使用详解
Android Lottie的简单使用详解1.导入库implementation 'com.airbnb.android:lottie:2.6.1'2.编写xml文件<com.airbnb.lottie.LottieAnimationView android:id="@+id/iv_ro...
2019-07-19 18:41:39
2504
原创 Android 抖动效果实现
Android 抖动效果实现1.在res/anim目录中新建一个xml文件,如:shake.xml,如果没有anim目录,自己创建一个anim文件夹就可以啦<?xml version="1.0" encoding="utf-8"?><translate xmlns:android="htt...
2019-07-19 18:05:46
695
原创 从零开始的的android源码编译之ubuntu安装open-jdk7
从零开始的的android源码编译之ubuntu安装open-jdk7如果编译5.0以上的需要使用open-jdk而不能使用oracle-jdk1.安装jdksudo apt-get install openjdk-7-jresudo apt-get install openjdk-7-jdk3.配置环境变量sudo gedit ~/.bas...
2019-06-14 21:42:49
337
3
原创 从零开始的的android源码编译之ubuntu安装oracle-jdk6
从零开始的的android源码编译之ubuntu安装oracle-jdk6如果编译android5.0以下的,需要使用oracle-jdk这里采用离线下载安装1.下载安装包https://www.oracle.com/technetwork/java/javase/archive-139210.html选择jdk6记得需要点击同意,64位的...
2019-06-11 21:53:07
276
原创 安卓卸载有root权限的系统应用
安卓调试有root权限的系统应用1.前言、从事安卓开发,有时候会有机会从事系统开发,博主就是一枚机器人系统开发人员。由于我是从应用层app转到系统层app开发,刚开始对于系统应用的调试很是摸不着头脑,adb install 安装不进去,无法调试。下面我就简单介绍一下系统app的调试我们编译是网上脚本编译,编译一次全ROM包...
2019-06-10 22:22:15
1716
原创 从零开始的的android源码编译之源码下载
从零开始的的android源码编译之源码下载如果没有安装虚拟机和ubuntu系统的可以参考我之前的文章从零开始的的android源码编译之安装waware虚拟机,图文详解从零开始的的android源码编译之安装ubuntu系统,图文详解1.首先做一些准备工作安装curlsudo apt-get install curl安装gitsud...
2019-06-10 21:50:48
492
原创 从零开始的的android源码编译之安装wmware tools
从零开始的的android源码编译之虚拟机复制粘贴开启我们wmware中的ubuntu系统,我们发现在主机中复制然后去虚拟机中粘贴,发现无法粘贴,这是我们还没有安装wmware tools,下面我们开始安装wmware tools,如果还没有安装虚拟机和ubuntu系统的可以看我之前的文章从零开始的的android源码编译之安装waware虚拟机,图文详解...
2019-06-06 21:46:38
2239
原创 从零开始的的android源码编译之安装ubuntu系统,图文详解
从零开始的的android源码编译之安装ubuntu系统,图文详解上一篇我们讲到了在wmware中安装虚拟机,没有看过的朋友,可以看从零开始的的android源码编译之ubuntu系统,图文详解在wmware中选择开启此虚拟机选择中文简体,安装ubuntu点击继续现在等它下载安装吧,网速好的情况下,通常需要20分钟系统...
2019-06-06 21:02:48
740
原创 从零开始的的android源码编译之安装waware虚拟机,图文详解
创建虚拟机1.wmware下载这里提供网盘下载链接:https://pan.baidu.com/s/1U6afZSWf4i5VpWOfme2NTA提取码:cnop2.iso镜像下载可以使用迅雷下载,如果下载地址失败,那就用底下的网盘下载地址:http://mirrors.aliyun.com/ubuntu-releases/链接:https://pan.bai...
2019-06-06 10:37:55
800
原创 android5.0新特性 clipping的用法
android5.0新特性 clipping的用法1.使用场景 要实现一个按钮的圆角矩形效果,很简单,做过android ui开发的同学应该都会,不就是在drawable中新建一个shape文件,类似如下:<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.c...
2018-05-21 11:24:17
580
原创 git高级用法,git cherry-pick
git高级用法,git cherry-pick1.使用场景 假设这样一个场景,产品提一个功能需求,你开发完,然后commit了;第二天产品说那个功能不要了,你说可以,然后reset回去;又过两天,产品又对你说,那个功能还是加上去吧,这时候你心里是不是有一万只草泥马奔驰而过,怎么办?代码已经reset了啊,重新开发?还是回退? 其实不要慌,git早已经考虑到了这种情况,这时候就是cher...
2018-05-19 17:34:54
6772
1
转载 三个案例带你看懂LayoutInflater中inflate方法两个参数和三个参数的区别
关于inflate参数问题,我想很多人多多少少都了解一点,网上也有很多关于这方面介绍的文章,但是枯燥的理论或者翻译让很多小伙伴看完之后还是一脸懵逼,so,我今天想通过三个案例来让小伙伴彻底的搞清楚这个东东。本篇博客我们不讲源码,只看使用。源码的解读会在下一篇博文中带来。inflate方法从大范围来看,分两种,三个参数的构造方法和两个参数的构造方法。在这两类中又有细分,OK,那我们就把各种情况都来演...
2018-05-12 18:42:25
187
原创 git避免多余的commit 合并信息
git避免多余的commit 合并分叉注意:不要直接add commit,不要直接add commit,不要直接add commit,如果commit可以git reset到之前的版本,不要加--hard1.git stash2.git pull --rebase,如果有conflict冲突,那么解决冲突3.git stash pop4.git add .5.git commit6.git pus...
2018-05-08 19:52:52
2236
原创 canvas绘制时钟刻度表
canvas绘制时钟刻度表1.首先看一下效果图2.基本知识点canvas.drawText:绘制文字,注意基线的位置为文字的左下角y轴所在的线canvas.drawLine:绘制线段,指定起始位置就好canvas.save:保存canvas的状态,比如translate平移之前或者rotate(单位为°,正为顺时针)旋转之前的状态canvas.restore:恢复到保存时候的canvas状态,这么...
2018-05-05 21:47:46
3092
转载 (转)android-problem——remount of /system failed: Read-only file system
adb remount后仍旧不能对system进行读写。需要进行adb disable-verity在Android6.0 (Android M)userdebug版本上(eng版本不存在该问题),发现使用adb remount 系统之后,还是不能对system分区进行操作,提示没有写权限,为只读文件系统Read-only file system解决方法如下 方法一:使用新的adb工具包 1.下载...
2018-05-04 20:20:26
660
原创 手机连不上Android Studio,解决办法
手机连不上Android Studio,解决办法window系统为window101.adb devices命令查看如果提示adb不是内部或者外部命令,原因是没有配置好adb的环境变量配置好之后,用adb验证下如果adb devices出现下面的情况首先adb version查看一下版本版本为1.0.39,比较高,可以下载一个低级的版本,如1.0.32,附上地址:点击打开链接解压之后,把下图高亮部...
2018-05-02 22:16:22
4730
原创 git工作中常用命令
git工作中常用命令1.全局配置>>git config -- global user.name "your name here">>git config -- global user.email "your email here">>git config -l // 查看你当前的配置2.生成publick keys>>ssh-keygen默...
2018-04-28 16:57:11
143
原创 Android Studio3.0之后汉字无法显示问题
Android Studio3.0之后汉字无法显示问题解决办法:1.使用对应位数的studio.exe,比如64位的使用studio64.exe,32位的使用studio.exe2.打开As中Tools=>SDK Manager中下载对应的sdk版本...
2018-04-27 15:52:54
1415
原创 android的android.mk,和application.mk文件编写(总结版)
android的android.mk,和application.mk文件编写(总结版)1.简介android.mk是用来描述要编译某个具体的模块,所需要的一些资源,包括要编译的源码、要链接的库等等application.mk:描述你的程序所需要的模块,即静态库或者共享库2.静态库和共享库的区别静态库:在程序编译时连接到代码,一般体积比较大共享库:在程序运行时动态加载,一般直接引用,体积比较小3.动...
2018-04-21 09:51:45
4131
原创 数据结构算法学习总结-慕课网(九)快速排序(从小到大)
数据结构算法学习总结-慕课网(九)快速排序(从小到大)1.回顾上一节降到了自底向上的归并排序这一节将讲一个性能很高的排序,快速排序2.分析快速排序的思想是首先取数组的第一个元素,记为v,找到一个合适的位置p,满足p位置之前的元素都小于v,p之后的元素都大于或者等于v,然后对小于v和大于或者等于v的元素再分别递归排序对于数组{4,5,1,3},4记为v,比较5和4,5比4大,继续下一个元素1;1和4...
2018-04-18 16:58:30
310
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人