SharedPreferences中commit与apply的区别

SharedPreferences中commit与apply的区别

  1. apply()写入文件的操作是异步的,会把Runnable放到线程池中执行,而commit()的写入文件的操作是在当前线程同步执行的。 因此当两者都可以使用的时候还是推荐使用apply(),因为apply()写入文件操作是异步执行的,不会占用主线程资源。
  2. commit()有返回值,apply()没有返回值。apply()失败了是不会报错的。

另外:

1、如果先后apply()了几次,那么会以最后一次apply()的为准。
2、commit()是把内容同步提交到硬盘的。而apply()先立即把修改提交到内存,然后开启一个异步的线程提交到硬盘,并且如果提交失败,你不会收到任何通知。
3、如果当一个apply()的异步提交还在进行的时候,执行commit()操作,那么commit()是会阻塞的。而如果commit()的时候,前面的commit()还未结束,这个commit()还是会阻塞的。(所以引起commit阻塞会有这两种原因)
4、由于SharePreferences在一个程序中的实例一般都是单例的,所以如果你不是很在意返回值的话,你使用apply()代替commit()是无所谓的。

Powered by Hexo and Hexo-theme-hiker

Copyright © 2018 - 2022 得一 All Rights Reserved.

访客数 : | 访问量 :