知识点总结

1.Activity A -> Activity B

A:onCreate() onStart() onResume()

A:onPause()

B:onCreate() onStart() onResume()

A:onStop()

返回后:

B:onPause()

A:onRestart() onStart() onResume()

B:onStop() onDestroy()

2.String相关总结

1,Stringbuilder()>Stringbuffer()>String

2,线程不安全 线程安全 

3.单例饱汉式(懒汉式)和饿汉式

饱汉式:

public class Singleton{

    private volatile static Singleton instance = null;

    private Single(){}

    public static Singleton getInstance (){

        if(instance == null) {

           synchronized(Singleton.class){

                if(instance == null) {

                    instance = new Singleton();

}

}

}

return instance;

}

}

饿汉式:

public class Singleton{

private final static Singleton instance = new Singleton();

private Singleton(){}

public static Singleton getInstance(){

    return instance;

}

}

4.需要搞清楚的3个问题

view的绘制流程

https://www.jianshu.com/p/705a6cb6bfee

每一个Activity包含一个PhoneWindow,DecorView是PhoneWindow类的内部类,是所有View的根View

measure() MeasureSpec 

EXACTLY 精准模式,match_parent或固定值

AT_MOST  最大模式,wrap_content

UNSPECIFIED 无限制模式,系统内部使用

layout() setFrame() 上下左右4个位置的相对位置

draw() 视图的绘制工作 绘制背景、自身view以及子view


touch事件分发

5.handler事件分发过程

handler message looper messageQueue

nativePollOnce()阻塞looper,但不会占用cpu

每个线程只能有一个Looper对象,多个线程可以公用looper

所谓主线程,只不过比子线程中多了一个looper,我们的UI线程在只能在主线中刷新,就是应为线程的loop方法不断轮询绘制的原因,子线程之所有不能刷新UI,是因为子线程没有loop方法,如果我们把子线程中设置一个looper,那么子线程也是可以刷新绘制UI的

6.设计模式总结

https://www.runoob.com/design-pattern/proxy-pattern.html

1.适配器模式:接口转换,解决接口兼容问题

例如:FileInputStream ->InputStreamReader ,字节流转换成Reader子类,从而有了读取的能力

2.装饰者模式:动态的给对象增加新的功能

InputStreamReader -> BufferedReader,从读取一个字符增加了读取一行字符的能力

3.代理模式:增加中间层,方便分配和控制

JDK 自带的动态代理:一定要实现接口,通过InvocationHandler 处理器接口,通过invoke对应方法实现代理访问

Cglib动态代理:不要求类实现接口

7.okhttp

描述:轻量级处理网络请求的开源框架,自动处理Gzip压缩,减少数据流量的消耗,连接池,共享Socket,还能自定义拦截器

自定义拦截器分为两种:

1)ApplicationInterceptor(应用拦截器)

2)NetworkInterceptor(网络拦截器)

1.都能对Response进行拦截,但是执行顺序不同,前者最先执行,多个拦截器会按照list中的顺序依次执行

2.网络拦截器可能执行多次


所有拦截器:

Application拦截器

retryAndFollowUpInterceptor 重定向和失败后重新请求拦截器

BridgeInterceptor 网桥拦截器

CacheInterceptor 缓存处理拦截器

ConnectInterceptor Socket层的握手链接拦截器

networkInterceptors 网络拦截器

CallServerInterceptor client和Server之前的读写操作


自定义拦截器可以:

1.URL重定向

2.请求体数据加密

https://www.jianshu.com/p/da4a806e599b

https://www.jianshu.com/p/eaee7cd227cd

8.Retrofit

优点:超级解耦,包含动态代理、适配器模式、策略模式、装饰者模式等大量的解耦思路

https://blog.csdn.net/stven_king/article/details/51839537

9.Rxjava

描述:一个链式调用的实现异步操作的开源框架

1.扩展的观察者模式,

Observable被观察者   subscribe订阅   Observer观察者

通过lift()实现Observable的调用及进行变换/铺平,实现链式调用的过程

2.Scheduler——调度器,指定代码的运行线程,包含4种:

Schedulers.immediate,当前线程

Schedulers.newThread,新线程

Schedulers.io,IO

Schedulers.computation,密集型(图像)

10.eventBus

简化了应用程序内各个组件之间进行通信的复杂度

1.三个角色:

Event:事件 

 Subscriber:事件订阅者 

 Publisher:事件的发布者

2.四种线程模型,指定线程:POSTING MAIN BACKGROUND ASYNC

https://www.jianshu.com/p/e7d5c7bda783

https://www.jianshu.com/p/d9516884dbd4

11.RecyclerView四级缓存

https://blog.csdn.net/HJsir/article/details/81485653

public final class Recycler {

//一级缓存中用来存储屏幕中显示的ViewHolder

final ArrayList mAttachedScrap = new ArrayList();

private ArrayList mChangedScrap = null;

//二级缓存中用来存储屏幕外的缓存

final ArrayList mCachedViews = new ArrayList();

private int mViewCacheMax = DEFAULT_CACHE_SIZE;

//四级缓存当屏幕外缓存的大小大于2,便放入mRecyclerPool中缓存。

private RecycledViewPool mRecyclerPool;

//三级缓存自定义缓存,根据coder自己定义的缓存规则。

private ViewCacheExtension mViewCacheExtension;

SparseArray mScrap = new SparseArray<>();

SparseArray与和HasmMap做对比

ArrayList和LinkedList做对比

12.listview复用机制

RecycleBin 中存放了需要复用的view,一开始里面是空的,当绘制完毕之后,会被添加到RecycleBin,此时convertView不为空

12.注解

本质就是一个继承了 Annotation 接口的接口

类似xml的标签语句,可以给方法加标签,通过方法名返回注解属性值

实现原理是:虚拟机在编译的时候就会将注解写入元素属性表,在运行的时候,采用 JDK 动态代理机制生成一个目标注解的代理类

将元素取出来,交给AnnotationInvocationHandler处理执行

13.fragment生命周期

onAttach()

onCreate()

onCreateView()

---------------------------------------------->Activity.onCreate()

onActivityCreated()

onstart()

onresume()

...

onpause()

onStop()

onDestroyView()

onDestroy()

onDetach()

--------------------------------->Activity.onDestroy()

14.View事件分发流程

https://www.cnblogs.com/smyhvae/p/4802274.html

ViewGroup分为:

onDispatchEvent()

onInterceptTouchEvent()

onTouchEvent()

内部分为:

DOWN-MOVE-UP-LongClick-Click

15.图片请求框架

Glide with(context).load(url).into()

优点:多种图片格式的缓存,适用于更多的内容表现形式(如Gif、WebP、缩略图、Video) * 生命周期集成(根据Activity或者Fragment的生命周期管理图片加载请求) * 高效处理Bitmap(bitmap的复用和主动回收,减少系统回收压力) * 高效的缓存策略,灵活(Picasso只会缓存原始尺寸的图片,Glide缓存的是多种规格),加载速度快且内存开销小(默认Bitmap格式的不同,使得内存开销是Picasso的一半)

16.synchronized与lock区别

知识点总结_第1张图片

17,http相关


18. 匿名内部类

1.内部类对象的创建依赖于外部类对象;

2 内部类对象持有指向外部类对象的引用。

https://blog.csdn.net/qq_27888773/article/details/78333841

19.三次握手和四次挥手

https://blog.csdn.net/qq_38950316/article/details/81087809


知识点总结_第2张图片


知识点总结_第3张图片


知识点总结_第4张图片

19.三次握手和四次挥手

RecyclerView缓存:

Recyclerview有四级缓存,分别是mAttachedScrap(屏幕内),mCacheViews(屏幕外),mViewCacheExtension(自定义缓存),mRecyclerPool(缓存池)

链接:https://www.jianshu.com/p/443d741c7e3e

20.类加载

加载-链接-初始化-使用-卸载

加链初始卸

https://www.jianshu.com/p/dd39654231e0

你可能感兴趣的:(知识点总结)