1. Android中数据存储的方式
FIle
SharedPreference
Sqlite
- 网络
ContentProvider
FileProvider
: 继承于ContentProvider
的子类,可以用于解决Android7.0中禁止我们的应用对外部公开file://的问题。
2. SharedPreference 是进程同步的吗
sharedPreference 默认不是线程同步的,可以设置模式为:
MODE_MULTI_PROCESS
做到进程同步,系统默认也是有缓存的,有很多问题,在Android N(7.0)以上废弃不能使用了,会抛出异常。推荐使用ContentProvider
sharedPreference
四种模式:
- MODE_PRIVATE
- MODE_MULTI_PROCESS
- MODE_WORLD_READABLE
- MODE_WORLD_WRITEABLE
3.Shareferences commit 和 apply 的区别
在很早的sdk当中,一般都使用
commit
方法,同步,直接写入磁盘,并且有返回结果boolean
类型,而apply
是异步, 先写入内存,然后异步写入磁盘。 如果操作频繁的话,apply
的性能优于commit
.
在阿里巴巴开发手册中也记录到:
SharedPreference 提 交 数 据 时 , 尽 量 使 用 Editor#apply()
,而非Editor#commit()。一般来讲,仅当需要确定提交结果,并据此有后续操作时,才使用 Editor#commit()。
4. View 的 measureSpec 由谁决定的
- View的
MeasureSpec
由这个父控件的MeasureSpec
和自身的LayoutParams
决定- 顶级
DecorView
由窗口尺寸和自身的LayoutParams
共同确定
5.ACTION_CANCEL 事件
一般来说,如果一个子视图接受了父视图分发给它的
ACTION_DOWN
事件,那么与ACTION_DOWN
事件相关的事件都要分发给这个子视图,但是如果父视图希望拦截其中的一些事件,不再继续转发事件给这个子视图的话,那么就需要给子视图一个ACTION_CANCEL
事件。
6. View的invalidate postInvalidate requestLayout区别
invalidate
会调用onDraw
进行重绘,只能在主线程postIncalidate
可以在其它线程,如子线程requestLayout
会调用onLayout
和onMeasure
,不一定会调用onDraw
7. View 的生命周期
Creation
创建(从xml中加载或者layout
文件中定义加载)onFinishInflate()
从xml中加载完成
Layout
布局onMeasure()
onLayout()
Drawing
绘制onDraw()
Event processing
事件处理Focus
聚焦onFocusChanged()
onWindowFocusChanged()
Attaching
附上onAttachingToWindow()
onDetachedFromWindow()
onVisibiltyChanged()
onWindowVisibiltyChanged()