1. Android中数据存储的方式
FIleSharedPreferenceSqlite- 网络
ContentProviderFileProvider: 继承于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()