Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

2019-07-18:简单介绍下ContentProvider是如何实现数据共享的? #100

Open
MoJieBlog opened this issue Jul 18, 2019 · 9 comments

Comments

@MoJieBlog
Copy link
Collaborator

No description provided.

@gabyallen
Copy link

一个程序通过contentprovide提供的接口content resover将自己的数据完全暴露出去;通过这样让其他程序可以读取到数据;并且也是程序之间唯一一种可以共享数据方式。
一般有两种方法:1自己创键一个content provide 2.将自己数据存放在一个已有的content provide中。

@18361237136
Copy link

其他程序可以通过ContentResolver来操作ContentProvider暴露的数据

  1. 自己自定义一个ContentProvider,通过uri的形式对外提供数据

@yangfanggang
Copy link

可以通过ContenrResolver来操作ContentProvider暴露的数据

@IT666
Copy link

IT666 commented Sep 23, 2019

ContentProvider(内容提供者):对外提供了统一的访问数据的接口。
ContentResolver(内容解析者):通过URI的不同来操作不同的ContentProvider中的数据。
ContentObserver(内容观察者):观察特定URI引起的数据库的变化。通过ContentResolver进行注册,观察数据是否发生变化及时通知刷新页面(通过Handler通知主线程更新UI)。

@yline
Copy link

yline commented Jan 14, 2020

1,通过URL的schema协议,定位共享的实现类和内容
2,基于系统的IBinder,实现了一个代理模式,使用者拿到代理对象,提供者实现具体的实现对象。使用者的操作最终都是通过提供者实现的

具体的通信过程,就是binder的跨进程通信内容了

@mlinqirong
Copy link

mlinqirong commented Dec 14, 2021

ContentProvider内容提供者 实现进程间的数据交互与共享 即跨进程间通信
ContentProvider为增删改查提供了统一接口
ContentResolver通过URI的不同来操作不同的ContentProvider中的数据

@mlinqirong
Copy link

ContentProvider内容提供者 实现进程间的数据交互与共享 即跨进程间通信

@senlinxuefeng
Copy link

当一个应用程序要把自己的数据暴露给其他程序时,可以通过ContentProvider来实现。
其他应用可以通过ContenrResolver来操作ContentProvider暴露的数据。

如果应用程序A通过ContentProvider暴露自己的数据操作接口,那么不管A 是否启动,其他程序都可以通过该接口来操作A的内部数据,常有增、删、查、改。

ContentProvider是以Uri的形式对外提供数据,ContenrResolver是根据Uri来访问数据。
** 步骤:**

定义自己的ContentProvider类,该类需要继承Android系统提供的ContentProvider基类。

在Manifest.xml 文件中注册ContentProvider,(四大组件的使用都需要在Manifest文件中注册) 注册时需要绑定一个URL。

例如: android:authorities="com.myit.providers.MyProvider"
说明:authorities就相当于为该ContentProvider指定URL。 注册后,其他应用程序就可以通过该Uri来访问MyProvider所暴露的数据了。
其他程序使用ContentResolver来操作。

调用Activity的ContentResolver获取ContentResolver对象
调用ContentResolver的insert(),delete(),update(),query()进行增删改查。
一般来说,ContentProvider是单例模式,也就是说,当多个应用程序通过ContentResolver来操作ContentProvider提供的数据时,ContentResolver调用的数据操作将会委托给同一个ContentResolver。

@NIKLINT
Copy link

NIKLINT commented Jan 5, 2024

当一个应用程序要把自己的数据暴露给其他程序时,可以通过ContentProvider来实现。 其他应用可以通过ContenrResolver来操作ContentProvider暴露的数据。

如果应用程序A通过ContentProvider暴露自己的数据操作接口,那么不管A 是否启动,其他程序都可以通过该接口来操作A的内部数据,常有增、删、查、改。

ContentProvider是以Uri的形式对外提供数据,ContenrResolver是根据Uri来访问数据。 ** 步骤:**

定义自己的ContentProvider类,该类需要继承Android系统提供的ContentProvider基类。

在Manifest.xml 文件中注册ContentProvider,(四大组件的使用都需要在Manifest文件中注册) 注册时需要绑定一个URL。

例如: android:authorities="com.myit.providers.MyProvider" 说明:authorities就相当于为该ContentProvider指定URL。 注册后,其他应用程序就可以通过该Uri来访问MyProvider所暴露的数据了。 其他程序使用ContentResolver来操作。

调用Activity的ContentResolver获取ContentResolver对象 调用ContentResolver的insert(),delete(),update(),query()进行增删改查。 一般来说,ContentProvider是单例模式,也就是说,当多个应用程序通过ContentResolver来操作ContentProvider提供的数据时,ContentResolver调用的数据操作将会委托给同一个ContentResolver。

是URI

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

9 participants