ContentProvider是干嘛用的?

Android开发的ContentProvider这个东西会看两遍吧。第一遍是整体选系android的时候,因为这个东西是四大组件之一,不看面试的时候不好说啊。第二次应该是实际要用的时候吧,或者像我这样写Activity写烦了想看点别的东西的人。

入正题,ContentProvider是干嘛用的?它被用于跨进程做数据共享用。其实你把Android的四大金刚(组件)放到一起,仔细想想他们各自的用途就会发现都是必不可少。他们共同的特点是跨进程。做为java工程师,想写个跨进程的东西不是很好写吧。

  • Activity用于展示数据内容,不同的activity可以通过intent跨进程进行调用。比如在Gallery中调用邮件分享照片
  • Service用于实现进程间方法的调用。被举得最多的栗子就是UI调用音乐播放服务。Service不仅仅是在后台运行的一段代码而已。如果是这样的话,为什么不自己写个handle-looper在自己的app中默默运行呢?关键在于跨进程通信ipc。
  • ContentProvider用于共享数据。多个进程间共享数据,可以通过共享文件的方法,而共享文件的话,权限自己怎么控制呢?linux的内存映射和管道什么的在android好像调用不了,好吧我没调用过 >_<|||。ContentProvider让开发者能够在拥有读写权限的情况下通过一条地址(比如content://com.fool/tab1)来访问共享数据。
  • BroadcastReceiver,可以接收系统和任意app发出的信号intent,如果通过匹配则配触发。同样是跨进程的。
日常开发的大部分任务都是开发单个进程的app,所以这些跨进程的东西有啥用?如果你的app是个大胖子吃了很多内存(比如图片应用),android对内存是有限制的,oom是经常遇到的头疼的问题吧。android对每个进程的内存使用量是有限制的,而你要是在一个app中开多个进程协同作战,将内存大户发配到不同的进程中,oom就没那么容易了。AndroidManifest.xml的activity内有个process属性,用于让app分配不同进程,而默认都在一个进程中。这时,如果你有相同的内容要在两个不同进程的activity中展示,同时在某些情况下要对其修改,是不是就得用进程数据共享了?ContentProvider在这时就有用场了。
大部分时候都只需要调用系统的ContentResolver来操作,调用参数都被封印在android.provider包的各个类中。MediaStore这个类就很有用哦。访问多媒体资源就靠它了。android继承了linux而拥有了一个类似文件数据库的东西,里面存着各种文件的路径信息。MediaStore就是访问媒体文件的入口。
自己做ContentProvider可以向外提供两种数据:格式化数据和流数据。格式化数据就是类似数据库中的表。当然你不是一提ContentProvider就想起数据库,用一个叫MatrixCursor可以在没有数据库的情况下返回cursor对象。流数据指的就是文件。这包括自己在/data/data中的数据也包括apk中的资源数据。这些数据其他apk在没有root权限的情况下是没法访问的,而ContentProvider说,我能。
怎么自建ContentProvider就去其他地方查吧。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值