自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(22)
  • 收藏
  • 关注

原创 注解+反射实战:自动findViewById

我们结合反射和注解技术,做一个简单的工具类,自动帮我们findViewById。ButterKnift早期就是这样做的。首先我们看使用方式public class MainActivity extends AppCompatActivity { @InjectView(R.id.tv) TextView tv; @Override protected void onCreate(Bundle savedInstanceState) { super.o

2021-07-11 18:35:35 204

原创 Java反射学习笔记

反射反射的使用场景一般情况下,我们使用某个类时必定知道它是什么类,它是用来做什么的,并且能够获得此类的引用。所以我们能直接对这个类进行实例化,之后使用这个类对象进行操作。反射则是一开始并不知道我要初始化的类对象是什么,自然也无法使用 new 关键字来创建对象了。这时候,我们使用 JDK 提供的反射 API 进行反射调用。使用反射,我们只需要知道这个类的信息,不需要有这个类的引用,就能获取、修改这个类的成员。反射的定义反射就是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对

2021-07-11 00:42:20 237

原创 java并发编程学习笔记

基础概念什么是进程和线程进程是操作系统进行资源分配的最小单位,资源包括CPU、内存空间、磁盘IO等。线程是 CPU 调度的最小单位,必须依赖于进程而存在CPU 核心数和线程数的关系多核心:也指单芯片多处理器( Chip Multiprocessors,简称 CMP),CMP 是由美国 斯坦福大学提出的,其思想是将大规模并行处理器中的 SMP(对称多处理器)集成 到同一芯片内,各个处理器并行执行不同的进程。这种依靠多个 CPU 同时并行地 运行程序是实现超高速计算的一个重要方向,称为并行处理

2020-11-30 22:15:36 162

原创 在哪里判断Activity是否在AndroidManifest中注册

我们跳转到一个Activity的时候,如果目标Activity没有在AndroidManifest.xml中注册,会报以下错误 Caused by: android.content.ActivityNotFoundException: Unable to find explicit activity class {com.example.androidp/com.example.androidp.SecondActivity}; have you declared this activity in

2020-11-27 23:55:31 837

原创 APP启动流程分析(下)

总流程分成三个阶段Launcher请求AMS阶段AMS到ApplicationThread阶段ApplicationThread到Activity阶段上图中的序号,会在下面的源码中标记源码解析Launcher请求AMS阶段Launcher也是APP,从Launcher点击一个APP图标,也是用startActivity。 //1 进去 startActivity(intent);我们点进去startActivity,来到Activity的startActi

2020-11-26 18:14:16 3861 3

原创 APP启动流程分析(上)

ActivityManagerService的启动流程介绍总体流程涉及的数据结构ProcessRecord(进程)ActivityRecordTaskRecordActivityStackActivityStackSupervisor详细的流程介绍这篇文章是讲,从手机桌面(Launcher)点击一个未启动app的图标到这个app启动完成的流程(冷启动)。总体流程Launcher、AMS、Zygote、app都处于不同的进程,他们之间需要跨进程才能通信。用户点击Launcher的app图标后,La

2020-11-16 20:06:06 1432 3

原创 ActivityManagerService的启动流程

ActivityManagerService的启动流程ActivityManagerService的启动流程(API 30)SystemServer启动总结AMS启动总结启动LauncherActivityManagerService的启动流程(API 30)ActivityManagerService是在SystemServer初始化的时候启动的,所以我们先看SystemServer的初始化 :SystemServer的main方法。 public static void main(String[]

2020-11-07 18:31:43 406

原创 Java注解学习笔记

Java注解目录Java注解注解的定义注解的定义注解的作用或者意义是什么?元注解@Retention注解的应用场景注解的定义注解的定义Java 注解(Annotation)又称 Java 标注,是 JDK1.5 引入的一种注释机制。是元数据的一种形式,提供有关于程序但不属于程序本身的数据。注解对它们注解的代码的操作没有直接影响。注解的作用或者意义是什么?注解本身没有任何意义,单独的注解就是一种注释,他需要结合其他如反射、插桩等技术才有意义。元注解在定义注解时,注解类也能够使用其他的注解声明。

2020-10-25 23:14:50 173

原创 Java泛型学习笔记

Java泛型为什么我们需要泛型?例子一例子二例子分析泛型的好处:泛型类、泛型接口和泛型方法什么是泛型泛型类泛型接口泛型方法如何限定类型变量?限定类型变量泛型使用中的约束和局限性不能用基本类型实例化类型参数运行时类型查询只适用于原始类型泛型类的静态上下文中类型变量失效不能创建参数化类型的数组不能实例化类型变量不能捕获泛型类的实例泛型类型能继承吗?泛型中的通配符类型? extends X? super X无限定的通配符 ?虚拟机是如何实现泛型的?为什么我们需要泛型?例子一实际开发中,经常有数值类型求和的

2020-10-25 16:31:53 198 1

原创 Service和IntentService 的区别

Service和IntentService的区别区别ServiceIntentServiceIntentService的使用源码分析为什么IntentService可用于执行后台耗时的任务,任务执行后会自动停止为什么IntentService具有高优先级为什么IntentService可以多次启动,每个耗时操作都会以工作队列的方式在onHandleIntent()回调方法中执行。区别Service不是运行在独立的线程,所以不建议在Service中编写耗时的逻辑和操作,否则会引起ANR。IntentS

2020-10-20 11:20:40 657

原创 Handler分析

Handler分析一,Handler的作用Handler的/作用是跨线程通信。Handler可以轻松地将一个任务切换到Handler所在的线程中去执行。常用于在子线程中进行耗时操作后,通过Handler切换到主线程中进行UI更新。二,Handler的组成Message(消息):需要被传递的消息,其中包含了消息ID,消息处理对象以及处理的数据等,由MessageQueue统一列队,最终由Ha...

2020-05-01 00:13:49 184

原创 View的事件分发机制源码解析(API28)

View的事件分发机制源码解析(API28)欢迎使用Markdown编辑新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入...

2020-01-14 23:09:55 162

原创 LeetCode算法题思路总结

No.724. 寻找数组的中心索引中心索引: 数组中心索引的左侧所有元素相加的和等于右侧所有元素相加的和思路:转化为求解 sunLeft * 2 + nums[p] = sumTotalNo.747. 至少是其他数字两倍的最大数在一个给定的数组nums中,总是存在一个最大元素 。查找数组中的最大元素是否至少是数组中每个其他数字的两倍。思路:转化为数组中的最大元素是否至少是第二大元素的两...

2019-09-17 22:50:54 406

原创 数据结构学习之数组

数组是一种用于按顺序存储元素的集合。可以通过数组索引来随机存取数组的元素。1,普通数组的操作初始化int[] a0 = new int[5];int[] a1 = {1, 2, 3};获取长度a1.length访问内容a1[0]遍历数组for (int i = 0; i < a1.length; ++i) {System.out.print(" " + a1[i]);...

2019-09-16 23:08:33 74

原创 Andorid开发中好用的库

1,RecyclerViewhttps://github.com/yanzhenjie/SwipeRecyclerView本库是基于RecyclerView的封装,提供了Item侧滑菜单、Item滑动删除、Item长按拖拽、添加HeaderView/FooterView、加载更多、Item点击监听等基本功能。2,TabLayouthttps://github.com/H07000223/F...

2019-08-20 10:41:09 107

原创 ButterKnife随笔

ButterKnift是通过注解Annotation和注解处理器AnnotationProcessor,在编译时(CLASS)自动生成XXActivity_ViewBinding.java文件,并在该文件中findViewById(),来简化代码。Element层级如下1,包 PackageElement2,类 TypeElement3,成员变量 VariableElement4,方法 ...

2019-08-18 21:17:57 97

原创 自定义View学习笔记

自定义View的流程所有的画布操作都只影响后续的绘制,对之前已经绘制过的内容没有影响。位移是基于当前位置移动,而不是每次基于屏幕左上角的(0,0)点移动...

2019-08-06 20:57:53 70

转载 Activity的启动模式

Activity的启动模式有四种启动模式:standard,singleTop,singleTask,singleInstance

2019-06-27 16:11:37 420

原创 Activity生命周期的学习笔记(欢迎指正和补充)

Activity学习笔记(欢迎指正Activity的生命周期1,activity启动2,Activity被DialogActivity覆盖其上3,Activity从被覆盖状态回到前台4,锁屏5,解锁屏6, 第2和第4的组合:先打开DialogActivity:onPause() onSaveInstanceState(),然后锁屏 onStop()7,在第6的基础上,解锁...

2019-06-27 08:54:00 149

原创 Android实现系统相册选择APP全局背景图片

最近项目需要实现一个功能:用户在系统相册里选择并更换APP全部界面的背景图片。基本思路:1,用户点击“选择背景图片”按钮后,跳转到系统相册中选择图片。APP把选择的图片压缩后单独保存到一个文件夹并取名background.jpg(下次保存则覆盖旧文件),并把图片的绝对路径保存到SharedPerference。2,在所有Activity的基类BaseActivity的onStart()中...

2019-06-15 01:01:42 1236

原创 Android用Drawable实现点击切换图片的圆形按钮

要实现圆形按钮,除了给按钮设置圆形图片背景,还能用drawable自己画一个圆,shape_circle_green.xml代码如下还能设置颜色的渐变效果android:startColor 设置渐变开始的颜色android:endColor 设置渐变结束的颜色实际使用的时候只需要用ImageView、Button也可以,但是绘制代价比View大使用ImageView要把 a...

2019-03-11 22:59:12 1264

转载 使用百度地图定位功能第一次成功,第二次开始返回505错误码

关羽@TOC欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。新的改变我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:全新的界面设计 ,将会带...

2019-01-12 10:47:05 3213 2

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除