记录一些android的基础知识

时间:2022-06-19 13:10:52

1.service是运行在主线程的么?

本地service是运行在主线程的,本地service不能运行耗时操作;remote service不在同一进程中,需要编写aidl进行ipc通讯。

2.广播的类型:

普通广播,有序广播,本地广播,sticky广播

3.线程保护?

volitile synchronized
synchronized 可以保证原子性
volatile只能保证可见性
如:n=n+1,这种volatile就无法保护。

4.eventbus 监听的事件:

onEvent:如果使用onEvent作为订阅函数,那么该事件在哪个线程发布出来的,onEvent就会在这个线程中运行,也就是说发布事件和接收事件线程在同一个线程。使用这个方法时,在onEvent方法中不能执行耗时操作,如果执行耗时操作容易导致事件分发延迟。
onEventMainThread:如果使用onEventMainThread作为订阅函数,那么不论事件是在哪个线程中发布出来的,onEventMainThread都会在UI线程中执行,接收事件就会在UI线程中运行,这个在Android中是非常有用的,因为在Android中只能在UI线程中跟新UI,所以在onEvnetMainThread方法中是不能执行耗时操作的。
onEventBackground:如果使用onEventBackgrond作为订阅函数,那么如果事件是在UI线程中发布出来的,那么onEventBackground就会在子线程中运行,如果事件本来就是子线程中发布出来的,那么onEventBackground函数直接在该子线程中执行。
onEventAsync:使用这个函数作为订阅函数,那么无论事件在哪个线程发布,都会创建新的子线程在执行onEventAsync.

5.glide和imageloader优势

更强的生命周期管理,更多的缓存策略配置,更强的内存优化,可以直接嵌入okhttp。
理解engine.理解lrucache缓存。

6.自定义view绘制

(1)、自定义View的属性
(2)、在View的构造方法中获得我们自定义的属性
[ 3、重写onMesure ]
(4)、重写onDraw
把3用[]标出了,所以说3不一定是必须的,当然了大部分情况下还是需要重写的。
viewgroup必须复写onlayout,具体的layout已经实现onlayout不用复写。

7. view 绘制

performMeasure->performLayout->performDraw
理解DecorView,ViewGroup和SurfaceFlinger的交互。

8.事件传递

理解InputManagerService
理解onInterceptTouchEvent与onTouchEvent的调用过程
理解motionEvent和GestureEvent

9.listview节约空间、提升性能、防止错位的方法:

复用convertView
使用ViewHolder
item中有图片时,异步加载
快速滑动时,不加载图片
item中有图片时,应对图片进行适当压缩
分批和分页加载
错位用settag,gettag来判断。

10.activity启动模式:

singleTop,singleTask比较好说。
有三个Activity:A、B、C。
A的launchMode为singleInstance,
B、C为默认的standard,
第一次A–B–C–A跳完之后,为什么从A进入了C并且是之前的实例C,而不是想象中的新创建一个Activity B的实例 ?