【IPC实战③】ContentProvider实战

本文介绍了ContentProvider作为Android进程间通信的重要方式,通过提供标准的数据操作接口实现数据共享。详细讲解了如何创建Book实体类、数据库、ContentProvider以及客户端的编写,同时也提到了ContentObserver的使用,最后给出了项目链接和相关文章推荐。
摘要由CSDN通过智能技术生成

前言

之前只知道ContentProvider是Android进程间通信的一种方式,最近才做了一个具体的学习,特此记录

ContentProvider也是AndroidIPC的一种很重要的方式,和Messenger一样,天生就适合进程间通信。同样的,它使用起来也比AIDL要简单很多,因为都是对Binder做了一层封装。

1.概念理解

使用ContentProvider,其实是提供了一套标准的数据操作接口给外界。外界可以通过这一整套接口(具体就是实现CRUD的功能的接口),实现数据之间的共享,从而实现进程间通信。至于具体操作的数据源是什么,比如是本地数据库,还是文件,还是网络获取,外界并不需要关心,这是ContentProvider内部的事情。

2.具体使用

①创建Book实体类
/**
 * Created by didiwei on 2022/5/15
 * desc: Book实体类
 */
public class Book {
   
    int bookId;
    String bookName;

    public Book(){
   

    }

    public Book(int bookId, String bookName) {
   
        this.bookId = bookId;
        this.bookName = bookName;
    }

    public int getBookId() {
   
        return bookId;
    }

    public void setBookId(int bookId) {
   
        this.bookId = bookId;
    }

    public String getBookName() {
   
        return bookName;
    }

    public void setBookName(String bookName) {
   
        this.bookName = bookName;
    }

    @Override
    public String toString() {
   
        return "Book{" +
                "bookId=" + bookId +
                ", bookName='" + bookName + '\'' +
                '}';
    }
}

②创建数据库,作为ContentProvider操作的数据来源
/**
 * Created by didiwei on 2022/5/15
 * desc:  数据库
 */
public class DatabaseHelper extends SQLiteOpenHelper {
   
    private static final int DB_VERSION = 1;//数据库版本号
    private static final String DB_NAME = "book_provider.db";//数据库名称
    public static final String BOOK_TABLE_NAME = "book";//book表
    public static final String USER_TABLE_NAME = "user";//user表

    //创建book表和user表
    private String CREATE_BOOK_TABLE = "create table if not exists "+ BOOK_TABLE_NAME +
            "(_id integer primary key," + "name text)";
    private String CREATE_USER_TABLE = "create table if not exists " + USER_TABLE_NAME +
            "(_id integer primary key," + "name text," + "sex int)";

    //创建默认构造方法
    public DatabaseHelper(Context context){
   
        super(context,DB_NAME,null,DB_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
   
        //创建book表和user表
        db.execSQL(CREATE_BOOK_TABLE);
        db.execSQL(CREATE_USER_TABLE);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
   

    }
}
③创建ContentProvider,即BookProvider

同时让它运行在一个独立的进程中
在这里插入图片描述
其中,
(1)authorities是ContentProvider的唯一标识。
(2)外界应用如果想访问BookProvider,就必须声明android:permission="com.example.PROVIDER"这个权限

/**
 * todo query 参数相对应的 sql语句
 *
 * String[] projection = {
 *     ContactsContract.Contacts._ID,
 *     ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
 *     ContactsContract.CommonDataKinds.Phone.NUMBER
 * };
 *
 * String selectionClause = ContactsContract.CommonDataKinds.Phone.NUMBER + " &
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值