- 浏览: 676323 次
- 性别:
- 来自: 深圳
最新评论
-
fingerplay:
请问一下,第一份,逻辑树,就是代码里可以操纵的,例如更改lay ...
UIView与CALayer -
ok_lyc:
分享到哪里去了
iPhoneUIFont各种字体 -
lliiqiang:
我的个人理解:wait方法是在java虚拟机层面上在获取对象锁 ...
JAVA多线程同步wait、notify、synchronized -
milixw:
谢谢分享,就在找这个
iphone 推送通知 java 实现 -
wsqwsq000:
你的log4j包不行,上网搜一下:log4j-1.2.16.j ...
iphone 推送通知 java 实现
看到一篇文章觉得不错,推荐给大家,希望大家喜欢
Application是一个完整的应用,比如某个apk,它对应一个Application,它里面可能包含n个Activity。
涉及到的类froyo/frameworks/base/core/java/android/app/ApplicationContext.java
froyo/frameworks/base/core/java/android/app/ActivityThread.java
froyo/frameworks/base/services/java/com/android/server/am/ActivityManagerService.java
当我们启动手机之后,如果需要启动一个activity,ActivityThread,ActivityManagerService就开始发挥作用了,这里不做细述。
当我们真正的启动一个activity的时候,我们会把当前Application的ApplicationContext传进去,
ApplicationContext实例持有一个mContextResolver对象,该对象对应于ApplicationContext的
内部类ApplicationContentResolver.
当activity调用getContentResolver()时,我们实际调用的是当前ApplicationContext中的mContextResolver.
由于黑色的继承关系,我们可以得到红色的调用关系
代码片段如下:
Activity调用ContextWrapper的方法
复制代码
然后会调用到ApplicationContext的方法
复制代码
其中:
复制代码
当执行mContentResolver.query()的时候,我们会调用父类ContentResolver的query();
复制代码
此时,会调用子类实例aquireProvider(Context,name);
复制代码
实现为:
复制代码
到这里的话,ContentResovler与ContentProvider的关系就搞懂了,具体其他的细节,将分为不同的方面,分别讲述。
Application是一个完整的应用,比如某个apk,它对应一个Application,它里面可能包含n个Activity。
涉及到的类froyo/frameworks/base/core/java/android/app/ApplicationContext.java
froyo/frameworks/base/core/java/android/app/ActivityThread.java
froyo/frameworks/base/services/java/com/android/server/am/ActivityManagerService.java
当我们启动手机之后,如果需要启动一个activity,ActivityThread,ActivityManagerService就开始发挥作用了,这里不做细述。
当我们真正的启动一个activity的时候,我们会把当前Application的ApplicationContext传进去,
ApplicationContext实例持有一个mContextResolver对象,该对象对应于ApplicationContext的
内部类ApplicationContentResolver.
当activity调用getContentResolver()时,我们实际调用的是当前ApplicationContext中的mContextResolver.
由于黑色的继承关系,我们可以得到红色的调用关系
代码片段如下:
Activity调用ContextWrapper的方法
- getContentResolver() {
- mBase.getContentResolver();
- }
- getContentResolver() {
- return mContentResolver;
- }
- mContentResolve r = new ApplicationContentResolver(this, mainThread);
- private static final class ApplicationContentResolver extends ContentResolver {
- public ApplicationContentResolver(Context context,
- ActivityThread mainThread)
- {
- super(context);
- mMainThread = mainThread;
- }
- @Override
- protected IContentProvider acquireProvider(Context context, String name)
- {
- return mMainThread.acquireProvider (context, name);
- }
- @Override
- public boolean releaseProvider(IContentProvider provider)
- {
- return mMainThread.releaseProvider(provider);
- }
-
- private final ActivityThread mMainThread;
- }
- public final Cursor query(Uri uri, String[] projection,
- String selection, String[] selectionArgs, String sortOrder) {
- IContentProvider provider = acquireProvider(uri);
- if (provider == null) {
- return null;
- }
- try {
- Cursor qCursor = provider.query(uri, projection, selection, selectionArgs, sortOrder);
- if(qCursor == null) {
- releaseProvider(provider);
- return null;
- }
- //Wrap the cursor object into CursorWrapperInner object
- return new CursorWrapperInner(qCursor, provider);
- } catch (RemoteException e) {
- releaseProvider(provider);
- return null;
- } catch(RuntimeException e) {
- releaseProvider(provider);
- throw e;
- }
- }
- public final IContentProvider acquireProvider(Uri uri)
- {
- if (!SCHEME_CONTENT.equals(uri.getScheme())) {
- return null;
- }
- String auth = uri.getAuthority();
- if (auth != null) {
- return acquireProvider(mContext, uri.getAuthority());
- }
- return null;
- }
- mMainThread.acquireProvider (context, name);
- public final IContentProvider acquireProvider (Context c, String name) {
- IContentProvider provider = getProvider (c, name);
- if(provider == null)
- return null;
- IBinder jBinder = provider.asBinder(); //获得binder对象,跨进程传递数据。
- synchronized(mProviderMap) {
- ProviderRefCount prc = mProviderRefCountMap.get(jBinder);
- if(prc == null) {
- mProviderRefCountMap.put(jBinder, new ProviderRefCount(1));
- } else {
- prc.count++;
- } //end else
- } //end synchronized
- return provider;
- }
- private final IContentProvider getProvider (Context context, String name) {
- synchronized(mProviderMap) {
- final ProviderRecord pr = mProviderMap .get(name); //ActivityThread中持有所有的Provider的实例
- if (pr != null) {
- return pr.mProvider;
- }
- }
- //如果确实没有,则查找,并install,再没有就直接抛异常了。
- IActivityManager.ContentProviderHolder holder = null;
- try {
- holder = ActivityManagerNative.getDefault().getContentProvider(
- getApplicationThread(), name);
- } catch (RemoteException ex) {
- }
- if (holder == null) {
- Log.e(TAG, "Failed to find provider info for " + name);
- return null;
- }
- if (holder.permissionFailure != null) {
- throw new SecurityException("Permission " + holder.permissionFailure
- + " required for provider " + name);
- }
- IContentProvider prov = installProvider(context, holder.provider,
- holder.info, true);
- //Log.i(TAG, "noReleaseNeeded=" + holder.noReleaseNeeded);
- if (holder.noReleaseNeeded || holder.provider == null) {
- // We are not going to release the provider if it is an external
- // provider that doesn't care about being released, or if it is
- // a local provider running in this process.
- //Log.i(TAG, "*** NO RELEASE NEEDED");
- synchronized(mProviderMap) {
- mProviderRefCountMap.put(prov.asBinder(), new ProviderRefCount(10000));
- }
- }
- return prov;
- }
发表评论
-
google开放的maps api接口
2012-01-12 22:51 1177google开放的Maps api接口,包括很多版 ... -
iphone中请求对应的Mime type
2011-09-21 10:03 2249Extension MIME type Desc ... -
android前端与java web后台的ssl交互
2011-08-18 17:39 2721android前端与java web后台如何进行ssl交 ... -
android style
2011-07-09 21:47 1413对于能够显示文字的控件(如TextView EditTex ... -
android 定时器
2011-07-09 21:47 2118在Android上常用的定时器有两种,一种是Java.util ... -
android 4大组件介绍
2011-07-09 21:47 1888Android组件 横看成岭侧成峰,远近高低各不同。 -- ... -
view中的getTag何setTag
2011-07-09 21:46 1371View中的setTag(Onbect)表示给View添加一个 ... -
android handler介绍
2011-07-09 21:46 1332/*** * Handler的定义: * 主要接受 ... -
AsyncTask的使用
2011-07-09 21:46 1055本片不多说 直接引用: ... -
Android 调试桥abd
2011-07-09 21:44 1042Android 调试桥(adb)是多种用途的工具,该工具可 ... -
Android 应用程序之间数据共享—ContentProvider
2011-07-09 21:44 1912在Android 应用程序之间数据共享—-ContentRes ... -
Content Provider
2011-07-09 21:44 1122Android程序的主要4部分 ... -
android之ContentResolver与ContentProvider
2011-07-09 21:43 1527android中对数据操作包含有: file, sqlite3 ... -
android service入门
2011-07-09 21:42 857android SDK提供了Service,用于类似*nix守 ... -
AsyncQueryHandler
2011-07-09 21:42 1351AsyncQueryHandler研究 andr ... -
android下载进度条
2011-07-09 21:41 4114我们今天开始学习的是下载进度的实现。今天的这段代码是网上找的, ... -
android UI设计之TableLayout
2011-07-09 21:41 1225TableLayout和我们平时在网页上见到的Table有所不 ... -
android如何获取后台正在运行的service
2011-07-09 21:40 3998给一段获取正在运行的后台service的代码,如下: ... -
Android之getSystemService
2011-07-09 21:40 1501getSystemService是Android很重要的一个 ... -
android体系架构
2011-07-09 21:39 2464作者:张华 发表于:200 ...
相关推荐
此为ContentResolver与ContentProvider的使用Demo.
主要介绍了android之ContentResolver与ContentProvider介绍,需要的朋友可以参考下
android 自定义 ContentProvider 以及 ContentResolver
简单实现数据库操作,能对外共享数据,ContentProvider和ContentResolver,实现数据对外共享
ContentProvider和ContentResolver永远是相对的,本章主要是讲ContentResolver的使用,当然是在android系统提供ContentProvider的情况下。 ContentProvider与ContentResolver概念上的东西的就不讲了,主要讲一下...
安卓程序间数据共享的实现,包含两个程序,共享资源的程序和读取资源的程序,共享资源的程序包含了SQLite数据库的使用。
ContentProvider与ContentResolver 与 SQLiteOpenHelper http://blog.csdn.net/i_do_can/article/details/50937380 http://blog.csdn.net/i_do_can/article/details/50937380
自定义ContentProvider的流程 ContentResolver访问通讯录数据库
主要介绍了Android ContentResolver使用说明,需要的朋友可以参考下
主要介绍了Android中ContentProvider和ContentResolver详解的相关资料,需要的朋友可以参考下
Android应用程序之间数据共享ContentResolver.pdf
Android中ContentResolver的使用说明.pdf 学习资料 复习资料 教学资源
程序例子包含了2个独立的Android程序,其中一个负责提供数据并提供本地操作,另外一个可以跨进程访问提供者提供的数据。例子虽然简单,但是覆盖到了Content Provider里面的知识点,例如集成Content Provider,Uri的...
利用ContentResolver访问者获取手机短信信息,在此记录一下,一遍以后查询。 首先看一下结果,结果如下: activity_message.xml类: <LinearLayout xmlns:android=http://schemas.android.com/apk/res/android...
之前在用到ContentProvider时也是在网上找的教程,但是按照那些做法不怎么全面,我是没有实现出来,并且对于报错也没有给出解释原因与解决办法,也是通过借鉴与自己摸索,将自己 的一点想法分享出来。包含 ...
利用contentprovider和ContentResolver获取手机联系人信息
ContentProvider使用简介里面的demo
http://blog.csdn.net/i_do_can/article/details/50942221 http://blog.csdn.net/i_do_can/article/details/50942221 http://blog.csdn.net/i_do_can/article/details/50942221