03 2020 档案

摘要:RecyclerView可以实现ListView和GridView的功能,但是有以下特点: 1. 可以实现横向滚动,瀑布样式排列; 2. 相较于ListView和GridView中需要手动复用convertView和ViewHolder,RecyclerView内部对对象的复用做了封装,只需要用就可 阅读全文
posted @ 2020-03-31 14:39 PraveZ 阅读(294) 评论(0) 推荐(0)
摘要:addHeaderView()、addFooterView() addHeaderView()和addFooterView()是用于在 给ListView设置Adapter之前 在列表中添加或删除一些元素。 主要有以下几点注意事项: 1. 两个方法必须在setAdapter()之前调用。如果之前调用 阅读全文
posted @ 2020-03-31 13:39 PraveZ 阅读(555) 评论(0) 推荐(0)
摘要:某天面试时被问到ListView的缓存机制,竟然不知道!赶紧来学习一下。 ListView的Adapter中都有一个方法getView(),平时我们就是在Adapter中用LayoutInflater从R.layout中拿取布局id然后填充为一个View返回,但是我却忽略了这个方法的第二个参数con 阅读全文
posted @ 2020-03-31 12:54 PraveZ 阅读(396) 评论(0) 推荐(0)
摘要:ViewPager与Fragment合用可以实现滑动效果,并独立管理每个滑动页面的生命周期。ViewPager主要有两种Adapter用于适配填充Fragment,通过代码来查看其不同之处。 布局 Fragment的布局就只设置一个TextView。 在activity的布局中加入一个ViewPag 阅读全文
posted @ 2020-03-31 12:31 PraveZ 阅读(2210) 评论(0) 推荐(0)
摘要:Android的触摸事件回调函数主要有三个 dispatchTouchEvent()、onInterceptTouchEvent()和onTouchEvent()。而传递触摸事件的主体也有三种,从父层到子层分别为Activity、ViewGroup和View。接下来先分别讲解这几个回调函数的作用,以 阅读全文
posted @ 2020-03-24 12:25 PraveZ 阅读(321) 评论(0) 推荐(0)
摘要:面试时遇到一个问题,泛型如何获取真实的类型?GG,下来以后查了相关资料,看了几遍才懂是啥意思,写在这里牢记! 泛型 泛型——就是将类型的明确推迟到创建对象或执行方法时再进行。泛型相当于一个参数,修饰这个类实际上是什么。 举例来说: ArrayList中,E就是一个未定的参数,而ArrayList中, 阅读全文
posted @ 2020-03-21 20:58 PraveZ 阅读(130) 评论(0) 推荐(0)
摘要:Java 中常见的Map类大概就这些吧,汇总一下,如果漏掉了什么以后再补上。 类|线程安全|key排序|内部结构|特性|不足处 | | | | | HashMap|不安全|乱序|hash数组+拉链法(红黑树)处理冲突| |乱序,不安全 LinkedHashMap|不安全|插入顺序(默认)/访问顺序| 阅读全文
posted @ 2020-03-21 19:13 PraveZ 阅读(187) 评论(0) 推荐(0)
摘要:实习面试好几次都被问到单例模式,每次都差点事儿,决定自己再手写一遍,不能再出错了!!!! 阅读全文
posted @ 2020-03-21 16:18 PraveZ 阅读(570) 评论(0) 推荐(0)
摘要:Java 中的输入/输出流一共有2种4个类。分别为字节类型的输入——InputStream、输出——OutputStream,字符类型的输入——Reader、输出——Writer。 四种输入输出流都是抽象类,在读取不同的内容时,分别使用对应的实现类去读取即可。 以读写文件为例,使用这四种类如下。 字 阅读全文
posted @ 2020-03-21 15:59 PraveZ 阅读(330) 评论(0) 推荐(0)
摘要:Java中,子类在继承父类的方法时,各种限定词的继承情况总结如下: 权限限定符 限定符 | 作用域 | 子类可用 | | private | 仅在该类中可用 | 不可被继承 | 仅在同包中可用 | 可被修改权限为protected和public protected|同包及子类可用|可被修改权限为pu 阅读全文
posted @ 2020-03-19 17:00 PraveZ 阅读(531) 评论(0) 推荐(0)
摘要:一、内存模型 Java中的内存分为五个部分,分别是方法区、虚拟机栈、堆、程序计数器和本地方法区。 1.方法区 存放运行时加载的类信息、静态变量、常量等信息。 2.虚拟机栈 存放对象的引用、方法的返回地址等。 每个线程都有一个栈。 3.堆 主要存放对象的实例。 所有线程共享同一个堆。 4.程序计数器 阅读全文
posted @ 2020-03-18 20:34 PraveZ 阅读(288) 评论(0) 推荐(0)
摘要:对一个变量添加volatile修饰,可以实现以下功能: 对这个变量的修改都会即时被写回内存,保证任何其他线程在读取的都是都读到的是实时值; Java中,变量都是保存在主内存中的,当线程访问变量时,都是从主内存拷贝一份到自己的工作内存,修改完值后再写回主内存。使用volatile可以保证线程在修改后, 阅读全文
posted @ 2020-03-18 17:58 PraveZ 阅读(145) 评论(0) 推荐(0)
摘要:生产者一边在生产,消费者一边消耗。当库存满的时候生产者暂停生产,直到有空位;当库存空的时候消费者暂停消费,直到有产品。 关键点: 1. 生产者和消费者都是在不断生产和消费的,是同时并发的,不应该等满了再消费 / 空了再生产。 2. 前提条件是生产速度和消费速度不同。 设计方法: 1. 生产者和消费者 阅读全文
posted @ 2020-03-18 16:16 PraveZ 阅读(491) 评论(0) 推荐(1)
摘要:sendMessage() 定义好handler后,在其他线程访问这个线程的handler,调用sendMessage()发送信息给主线程的handler。内部是通过消息队列的方式依次传递。 handleMessage() 在定义自己的Handler的时候都会重写Handler的handleMess 阅读全文
posted @ 2020-03-17 16:32 PraveZ 阅读(9211) 评论(0) 推荐(2)
摘要:synchronized作用在不同位置,使用的锁不同,但是作用是一样的。被synchronized修饰的部分,必须持有锁,才能运行,否则就要等待。 作用位置 作用在静态方法上,将整个类作为锁,同时只能有一个线程访问这个类。锁 = Class.class 作用在普通方法上,将类作为锁,锁 = this 阅读全文
posted @ 2020-03-16 20:12 PraveZ 阅读(253) 评论(0) 推荐(0)
摘要:首先明确一点就是Fragment依存于Activity存在的,Fragment的on方法都由所“寄生”的Activity中的on方法调用。 写一个例子来说明启动顺序。 过程 启动: 类|方法 | Activity|onCreate: Fragment|onAttach: Fragment|onCre 阅读全文
posted @ 2020-03-16 17:12 PraveZ 阅读(1044) 评论(0) 推荐(0)
摘要:加载过程 加载 将class文件加载入内存 连接 1. 验证。防止传入错误数据弄脏JVM。 2. 准备。给静态变量分配内存空间。 3. 解析。将符号引用转为直接引用。 符号引用: A引用B,此时是A引用了B的CONSTANT_Class_info(类似字符串)。 直接引用: A引用B,那么A直接指向 阅读全文
posted @ 2020-03-16 14:28 PraveZ 阅读(186) 评论(0) 推荐(0)
摘要:最近在学习Android Studio时,回顾了一些Java源码,发现有些源码点开以后找不到对应的真正代码,如HashMap中的TreeNode是继承自LinkedHashMap.LinkedHashMapEntry,但显示找不见LinkedHashMapEntry这个静态内部类,而且LinkedH 阅读全文
posted @ 2020-03-16 13:50 PraveZ 阅读(2568) 评论(0) 推荐(1)