内容提供者是Android应用程序的主要构建组件之一,用于为应用程序提供内容。内容提供者封装数据,并通过单个ContentResolver接口将数据提供给应用程序。只有在需要在多个应用程序之间共享数据时才需要内容提供程序。例如,联系人数据由多个应用程序使用,必须存储在内容提供程序中。如果不需要在多个应用程序之间共享数据,则可以通过android.database.sqlite.SQLiteDatabase直接使用数据库。
当通过ContentResolver发出请求时,系统会检查给定URI的权限,并将请求传递给在该权限注册的内容提供者。内容提供程序可以按照自己的意愿解释URI的其余部分。UriMatcher类有助于解析uri。需要实现的主要方法是:
- onCreate:初始化提供程序时调用。
- query:它将数据返回给调用方。
- insert:将新数据插入到内容提供程序中。
- update:更新内容提供程序中的现有数据。
- delete:从内容提供程序中删除数据。
- getType:返回内容提供程序中数据的MIME类型。
数据访问方法(如insert和update)可以同时从多个线程调用,并且必须是线程安全的。其他方法(如onCreate)只能从应用程序主线程调用,必须避免执行冗长的操作。有关它们预期的线程行为,请参阅方法描述。
对ContentResolver的请求会自动转发到适当的ContentProvider实例,因此子类不必担心跨进程调用的细节。