1.okhttp原理:
运用建造者模式,Dispatcher运用线程池,底层封装okio调用socket
2.Token业务逻辑:
3、进程间通信:bundle/Intent、文件共享、Messenger、AIDL、ContentProvider、Socket
线程间通信:Handler、runOnUiThread、view.post(Runnable r)、AsyncTask、Evenbus、Rxjava
Activity之间通信:Intent、类的静态变量、全局变量Application、外部工具(sqlite、Sharedpreference、File)、bindService
Activity与Service通信方式:bindservice、接口回调、广播、EvenBus、Rxjava
Activity与Fragment通信方式:
1、在fragment调用Activity:getActivity()、接口回调、广播、Evenbus、Rxjava
2、在Activity调用Fragment:setArguments()、接口回调、广播、Evenbus、Rxjava
4、bind机制:
AIDL:Stub和Proxy
Stub:接受数据
Proxy:发送数据(服务端的代理)
客户端先通过asInterface拿到AIDL接口new一个Proxy,然后调用业务方法,接着调用客户端transact,通过binder对象的一系列处理后,(服务端这里在内核空间注册,生成一个业务方法的代理对象)调用服务端onTransact,客户端transact返回结果
服务端new一个Stub,重写业务方法
5、view事件分发
Activity分发:源码包括两个方法,superDispatchTouchEvent和onTouchEvent,superDispatchTouchEvent实质上调用ViewGroup(DecorView)的分发方法(实现事件传递),
(1)superDispatchTouchEvent返回true,说明事件被父ViewGroup处理,接着Activity返回true,分发结束;
(2)superDispatchTouchEvent返回false(即没有被父ViewGroup处理),调用onTouchEvent方法;
(3)onTouchEvent返回true,事件被Activity消费,点击在Window边界外,分发结束;
(4)onTouchEvent返回false,事件未被Activity消费,点击在Window边界内,分发结束;
ViewGroup分发:
调用dispatchTouchEvent方法,调用onInterceptTouchEvent方法判断是否拦截(可以设置disallowIntercept),返回true或(点击空白处)拦截,调用父view的dispatchTouchEvent方法。
返回false不拦截,遍历Viewgroup的子view,调用子View的dispatchTouchEvent,传递事件到view。
onTouchEvent为父view的方法
View事件分发:
dispatchTouchEvent方法:
判断三个条件同时为true,dispatchTouchEvent返回true,事件分发结束。三个条件为注册mOnTouchListener、控件是否为enable、mOnTouchListener.onTouch。
dispatchTouchEvent返回false,调用onTouchEvent方法,在up事件中调用click事件,
onTouchEvent返回true分发结束;
onTouchEvent返回false,回调ViewGroup的父VIew的onTouchEvent;
整体流程
Activity的superDispatchTouchEvent默认调用父ViewGroup的dispatchTouchEvent,接着调用onInterceptTouchEvent为false默认不拦截,调用子View的dispatchTouchEvent返回false,调用View的onTouchEvent方法返回false,回调ViewGroup的dispatchTouchEven返回false,调用ViewGroup的父View的onTouchEvent,回调Activity的onTouchEvent,流程结束。
解决滑动冲突:
1.如果滑动方向不一致,通过两点坐标判断是否拦截
如果滑动方向一致,用外部拦截法和内部拦截法解决
2,外部拦截法:拦截父View的ACTION_MOVE事件
3.内部拦截法:子View重新parent.requestDisallowInterceptTouchEvent方法,同时父View也需要调onInterceptTouchEvent
通过以上三种方法配合使用