Android10.0 ContentProvider工作过程源码解析

本文出自门心叼龙的博客,属于原创类容,转载请注明出处。

今天写的这篇已经源码解析的第六篇了,虽然这类文章不如实战类文章受众那么广,但是作为每个Android开发工程师来讲,加强内功修炼这是作为向高级工程师迈进的必经之路。要知道了解了底层的工作原理对于以后实战开发中出现的各种各样的问题都会轻易解决。这和习武是一个道理,如果一个人它的内功很强,那它学什么都很快很容易掌握,否则它永远只是个花架子。
好了,言归正传,我们在日常开发过程中经常需要访问照片应用中图片资源,或者读取通讯录应用当中的联系人信息等等的一些应用场景,这时候就需要用到ContentProvider,ConentProvider在Android四大组件中排行老四,它是一个国家图书馆,为不同的应用程序之间的数据共享提供了统一的访问接口,它需要和ContentResolver配合使用,ContentProvider负责提供数据,ContentResolver负责获取数据。在应用程序启动的时候,ContentProvider就会被初始化注册到ActivityManagerServcie,然后其他的应用通过uri向服务端获取ConentProvider所对应的Transport对象。Transport本质上是一个binder,有了binder这个中间人对象,我们就可以调用远程的ConentProvider所提供的方法了。和之前一样,我先先来回顾一下ContentProvider的简单使用,然后在对它的源码进行解析。

android读取联系人权限问题

08-09
为什么API22可以正常运行,API23报错? 08-09 03:47:26.070 2540-2540/com.example.myapplication E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.myapplication, PID: 2540 java.lang.SecurityException: Permission Denial: opening provider com.android.providers.contacts.ContactsProvider2 from ProcessRecord{de6ff81 2540:com.example.myapplication/u0a72} (pid=2540, uid=10072) requires android.permission.READ_CONTACTS or android.permission.WRITE_CONTACTS at android.os.Parcel.readException(Parcel.java:1599) at android.os.Parcel.readException(Parcel.java:1552) at android.app.ActivityManagerProxy.getContentProvider(ActivityManagerNative.java:3550) at android.app.ActivityThread.acquireProvider(ActivityThread.java:4778) at android.app.ContextImpl$ApplicationContentResolver.acquireUnstableProvider(ContextImpl.java:2018) at android.content.ContentResolver.acquireUnstableProvider(ContentResolver.java:1468) at android.content.ContentResolver.query(ContentResolver.java:475) at android.content.ContentResolver.query(ContentResolver.java:434) at com.example.myapplication.MainActivity$1.onClick(MainActivity.java:43) at android.view.View.performClick(View.java:5198) at android.view.View$PerformClick.run(View.java:21147) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5417) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
©️2020 CSDN 皮肤主题: 撸撸猫 设计师: 设计师小姐姐 返回首页
实付29.90元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值