ContentProvider的底层实现是Binder,所以ContentProvider的6个方法都是运行在ContentProvider所在应用的进程中,其中,除了onCreate由系统回调并运行在主线程里,其他五个方法均由外界回调并运行在Binder线程池里。外界每调用一次提供器的方法都会独自开启一个线程。
ContentProvider主要以表格的形式来组织数据,并且可以包含多个表,和数据库很相似。
在manifest文件里注册提供器时,使用属性 android:authorities="包名.provider" 来唯一指定提供器,name属性用来指定java文件,一般还使用permission属性来指定访问权限,其中可以细分为readPermission和writePermission。
让ContentProvider也实现数据改变时通知其使用者,需要先让使用者通过ContentResolver的registerContentObserver来注册,然后ContentProvider使用notifyChange方法来通知外界数据改变,最后使用者通过unregisterContentObserver解除观察者模式。
如果ContentProvider的底层数据是数据库,可以不用考虑同步问题,但是如果底层是内存数据,比如List,则必须做同步处理。
如果是调用查询方法,记得在使用完Cursor后关闭Cursor实例。