随笔记录Android

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 会调用 onLayoutonMeasure ,不一定会调用 onDraw

7. View 的生命周期

    1. Creation 创建(从xml中加载或者layout 文件中定义加载)

      1. onFinishInflate() 从xml中加载完成
    2. Layout 布局

      1. onMeasure()
      2. onLayout()
    3. Drawing 绘制

      1. onDraw()
    4. Event processing 事件处理

    5. Focus 聚焦

      1. onFocusChanged()
      2. onWindowFocusChanged()
    6. Attaching 附上

      1. onAttachingToWindow()
      2. onDetachedFromWindow()
      3. onVisibiltyChanged()
      4. onWindowVisibiltyChanged()
-------------本文结束感谢您的阅读-------------