运行在主线程的ContentProvider为什么不会影响主线程的UI操作
1. contentProvider的初始化是在它自己进程的主线程里面完成,一般发生在有人第一次访问这个contentProvider或者这个contentProvider进程第一次启动,比如这个进程有个service,开机启动,那么随着servier启动的还有contentProvider.
2. contentProvider有个android:multiProcess属性,用来配置是否在多个进程里面,有不同的实例。如果为true,那么它就会在每个访问这个contentProvider的进程里面生成一个对象。这个时候调用contentProvider,就是哪个线程调用的,contentProvider就运行在那个线程里面。
如果这个值配置为false,那么多个进程之间***享一个contentProvider,通过binder来进行进程之间对象传递。如果多个进程同时访问,会为每个访问请求分配个线程。所以,这些操作,比如查询,不会运行在contentProvider进程的主线程。
3. contentProvider查询等操作是否需要等待,需要binder来设置。
4. 另外,contentProvider查询的数据传递是通过ashmem来完成的。
总而言之,
1. contentProvider的初始化是在主线程里面完成。
2. 请求查询等操作的话,应用程序最好自己起一个线程去完成。
3. contentProvider实现比较复杂,底层交互甚多。