BroadcastReceiver+ContentProvide

LocalBroadcast
本地广播只在本应用范围内传播,不用担心隐私数据泄露的问题,不用担心别的应用伪造广播,更安全
底层通过handler实现的,更高效

安全性和高效性

广播receive方法中实现网络请求,要开子线程,不然超过10s引起anr

谈谈你对广播的理解?
https://www.jianshu.com/p/3fd01710c2f9
https://blog.csdn.net/u013933272/article/details/68064215//源码解析

初始化时间
ContentProvider初始化(onCreate)是在Application生命周期方法attachBaseContext之后、onCreate之前

总结一下,我们的应用和ContentProvider初始化过程大致为:
ActivityThread.attath()->
AMS.attachApplication()->
sendMessage(CONTENT_PROVIDER_PUBLISH_TIMEOUT_MSG)->
ActivityThread.handleBindApplication()->
Application.attachBaseContext()->
ActivityThread.installContentProviders->
ContentProvider.onCreate()->
AMS.publishContentProviders()->
removeMessage(CONTENT_PROVIDER_PUBLISH_TIMEOUT_MSG)->
Application.onCreate()

为什么要用 ContentProvider?它和 sql 的实现上有什么差别?

ContentProvider 可以实现不同 app 之间共享,但是 sql 只能查询本应用下的数据–支持多线程、多进程

ContentProvider 屏蔽了数据存储的细节,内部实现对用户完全透明,用户只需要关心操作数据的uri 就可以了–存放在contentprovide的数据,以安全的形式进行封装

Sql 也有增删改查的方法,库。而 ContentProvider 还可以去增删改查本地文件. xml 文件的读取等

ContentProvider原理分析
1,知道我们在调用ContentProvider的query后是怎么样处理流程?

2,知道为什么Application为慢于ContentProvider初始化?

3,理解stable和unstable的ContentProvider区别。
https://www.jianshu.com/p/e4803b321f37

原理:我们都知道ContentProvider的onCreate的调用时机介于Application的attachBaseContext和onCreate之间,

Provider的onCreate优先于Application的onCreate执行,并且此时的Application已经创建成功,而Provider里的context正是Application的对象,

Lifecycle这么做,把init的逻辑放到库内部,让调用方完全不需要在Application里去进行初始化了,十分方便

contentProvide启动过程

https://zhuanlan.zhihu.com/p/142910234

和ContentProvider初始化过程大致为:

ActivityThread.attath()->

AMS.attachApplication()->

sendMessage(CONTENT_PROVIDER_PUBLISH_TIMEOUT_MSG)->

ActivityThread.handleBindApplication()->

Application.attachBaseContext()->

ActivityThread.installContentProviders->

ContentProvider.onCreate()->

AMS.publishContentProviders()->

removeMessage(CONTENT_PROVIDER_PUBLISH_TIMEOUT_MSG)->

Application.onCreate()

说说 ContentProvider、ContentResolver、ContentObserver 之间的关系

ContentProvider 内容提供者,用于对外提供数据

ContentResolver.notifyChange(uri)发出消息

ContentResolver 内容解析者,用于获取内容提供者提供的数据

ContentObserver 内容监听器,可以监听数据的改变状态

ContentResolver.registerContentObserver()监听消息

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值