首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android四大组件之ContentProvider

Android四大组件之ContentProvider ContentProvider 安卓应用程序默认是无法获取到其他程序数据,这是安卓安全学基石(沙盒原理)。...ContentProvidergetContext和AndroidTestCastgetContext方法一样,都是一个模拟上下文,必须在该类初始化之后才会调用setContext方法将context...设置成自己成员变量记录, 所以对于获取getContext时候只能放在方法内,不能放到成员位置,因为成员上时是null,而在方法内调用时该类就会已经初始化完了 ContentProvider...query()后不能关闭数据库,因为其他应用在调用该query方法时需要继续使用该返回值Cursor,所以不能关闭数据库,因为数据库关闭之后Cursor就不能用了, Cursor中保存数据其实是数据库一个引用...如果数据是SQLiteDatabase,表必须有一个_id列,用来表示每条记录唯一性。 继承ContentProvider,并实现相应方法。

95260
您找到你想要的搜索结果了吗?
是的
没有找到

安卓基础干货(九):安卓内容提供者学习

使用ContentProvider(内容提供者)共享数据 ContentProvider android作用是对外共享数据,也就是说你可以通过ContentProvider把应用数据共享给其他应用访问...,也可以是文件、xml或网络等其他存储方式,如下: 要操作xml文件person节点下name节点,可以构建这样路径:/person/name 如果要把一个字符串转换成Uri,可以使用Uri类.../person路径,返回匹配码为1 使用ContentProvider共享数据 ContentProvider类主要方法作用: public boolean onCreate() 该方法ContentProvider...使用ContentResolver操作ContentProvider数据 当外部应用需要对ContentProvider数据进行添加、删除、修改和查询操作时,可以使用ContentResolver...数据变化 如果ContentProvider访问者需要知道ContentProvider数据发生变化,可以ContentProvider 发生数据变化时调用getContentResolver

1.6K10

Android:关于ContentProvider知识都在这里了!

外部进程通过 ContentResolver类 从而与ContentProvider类进行交互 4.2 为什么使用通过ContentResolver类从而与ContentProvider类进行交互,...mContext = getContext(); // ContentProvider创建时对数据库进行初始化 // 运行在主线程,故不能做耗时操作,此处仅作展示...运行准备数据进程1 进程1,我们准备好了一系列数据 ? 运行需要访问数据进程2 进程2,我们先向ContentProvider插入数据,再查询数据 ?...至此,关于ContentProvider进程内 & 进程间使用讲解完毕。 ---- 6....ContentProvider底层是采用 AndroidBinder机制,若想了解请看文章图文详解 Android Binder跨进程通信原理 下一篇文章将对讲解Android 相关知识,有兴趣可以继续关注

2.2K32

QT4A重打包实现原理

动态代理是一种在运行过程动态生成代理类方法,它可以使用很少量代码,实现对被调用方法拦截和处理。 但是,它有个缺点:只能针对接口创建代理。因此,只部分场景可以使用该方法。...来分析下为什么这里可以使用动态代理?...."); } 这部分代码已经集成Android SDKdx.jar文件,但是没有找到命令行执行入口,但是可以通过将META-INF/MANIFEST.MF文件Main-Class: com.android.dx.command.Main...利用ContentProvider执行代码 调试过程偶然发现如果应用定义了ContentProvider组件,ActivityThread类会在handleBindApplication自动安装这些组件...run.invoke(entryClass, processName); }catch(Exception e){ e.printStackTrace(); } } 这种方法可以解决三星等手机遇到无法使用

1K10

Android 安全】DEX 加密 ( Application 替换 | 分析 ContentProvider 组件调用 getApplication() 获取 Application )

( 红色部分 ) 打印日志 ; ContentProvider使用 Application 仍然是代理 Application , 并不是真实应用 Application ; 二、 ActivityThread...方法中进行 , 也就是说 ContentProvider Application 替换之前就创建完成了 ; 因此打印日志 , ContentProvider onCreate 方法 ProxyApplication..., ContentProvider 组件调用 getContext 获取上下文对象 , 获取就是该对象 ; // ★ 注意此处进行了上下文赋值 , 就是代理 Application , ProxyApplication...// ★ ContentProvider 组件调用 getContext 获取上下文对象 // ★ 获取就是该对象 mContext = context; ContentProvider..., 就是代理 Application , ProxyApplication // ★ ContentProvider 组件调用 getContext 获取上下文对象 // ★ 获取就是该对象

1K20

探究 | App Startup真的能减少启动耗时吗

(想看结果可以直接跳到最后实践和总结阶段) Contentprovider初始化 想必大家都了解,很多三方库都需要在Application中进行初始化,并顺便获取到Application上下文...但是也有的库不需要我们自己去初始化,它偷偷摸摸就给初始化了,用到方法就是使用ContentProvider进行初始化,定义一个ContentProvider,然后onCreate拿到上下文,就可以进行三方库自己初始化工作了...可以想象,按照上述做法,所有库都这样设定了,那么都会在同一个ContentProvider也就是androidx.startup.InitializationProvider初始化,但是如果需要设定不同库初始化顺序怎么办呢...这个时间是Android源码帮我们计算,可统计到Activity启动时间,如果我们Home页执行命令,也就能得到一个冷启动时间。...所以得出结论,当集成使用ContentProvider达到一定个数之后,确实能减少耗时,但是减少不多,比如这里我们是10个ContentProvider集成App Startup后能减少耗时

1.7K51

Carson带你学Android:关于ContentProvider知识都在这里了!

ContentResolver类 从而与ContentProvider类进行交互 4.2 为什么使用通过ContentResolver类从而与ContentProvider类进行交互,而不直接访问ContentProvider...mContext = getContext(); // ContentProvider创建时对数据库进行初始化 // 运行在主线程,故不能做耗时操作,此处仅作展示...Github地址:ContentProvider2 结果展示 进程展示时,需要先运行准备数据进程1,再运行需要访问数据进程2 运行准备数据进程1 进程1,我们准备好了一系列数据...运行需要访问数据进程2 进程2,我们先向ContentProvider插入数据,再查询数据 至此,关于ContentProvider进程内 & 进程间使用讲解完毕。...总结 用一张图总结本文内容 ContentProvider底层是采用 AndroidBinder机制,若想了解请看文章图文详解 Android Binder跨进程通信原理 Carson带你学

43110

Android开发基础系列】数据持久化专题

简介         现在主流移动设备Android、iPhone等都使用SQLite作为复杂数据存储引擎,我们为移动设备开发应用程序时,也许就要使用到SQLite来存储我们大量数据,所以我们就需要掌握移动设备上...,第一种最为简单,将所有的SQL语句都组织到一个字符串使用占位符代替实际参数,selectionArgs就是占位符实际参数集;下面的几种参数都很类似,columns表示要查询列所有名称集,selection...我们获取数据库实例时使用了getWritableDatabase()方法,也许朋友们会有疑问,getWritableDatabase()和getReadableDatabase(),你为什么选择前者作为整个应用数据库实例呢...可以不同应用程序之间共享数据。Android已经为常见一些数据提供了默认ContentProvider。    ...数据变化         如果ContentProvider访问者需要知道ContentProvider数据发生变化,可以ContentProvider发生数据变化时调用getContentResolver

28220

Android ContentProvider实例详解

但一般这些存储都只是单独一个应用程序之中达到一个数据共享,有时候我们需要操作其他应用程序一些数据,就会用到ContentProvider。...2URL URL(统一资源标识符)代表要操作数据,可以用来标识每个ContentProvider这样你就可以通过指定URI找到想要ContentProvider,从中获取或修改数据。...AndroidURI格式如下图所示: ? A:schema,已经由Android所规定为:content://....Android工作方式跟HTTP类似,ContentProvider会根据URI来返回MIME类型,ContentProvider会返回一个包含两部分字符串。...Android类型已经固定好了,不能更改,只能区别是集合还是单条具体记录,子类型可以按照格式自己填写。 使用Intent时,会用到MIME,根据Mimetype打开符合条件活动。

2.3K20

Jetpack 最新成员 AndroidX App Startup 实践以及原理分析

为什么无论是 Google 还是第三方库,初始化时都会在 ContentProvider 里面进行初始化? ContentProvider 里初始化会带来什么性能问题?...应用启动时使用 ContentProvider 进行初始化,我们来看一下 WorkManager 源码,先来看一下 AndroidManifest.xml 文件内容。...如上所见,我们可以看到 AndroidManifest.xml 文件内定义了一个名为 WorkManagerInitializer ContentProvider来看看 WorkManagerInitializer...这样库,都在 ContentProvider 里面进行一些初始化工作, App 启动时运行多个 ContentProvider这样会带来一些问题: 多个 ContentProvider 会增加了...ContentProvider onCreate 方法会先于 Application OnCreate 方法执行,这是冷启动阶段自动运行初始化,来看一下 Android 10 系统源码。

79530

ContentProvider初探

引言 我们什么时候 会用到ContentProvider呢? 1.我们想在自己应用访问别的应用,或者说一些ContentProvider暴露给我们一些数据, 比如手机联系人,短信等!...使用系统提供ContentProvider 其实很多时候我们用到ContentProvider并不是自己暴露自己数据,更多时候通过 ContentResolver来读取其他应用信息,最常用莫过于读取系统...; resolver.insert(uri, conValues); } 注意事项: 上述代码4.4以下都可以实现写入短信功能,而5.0上就无法写入,原因是: 从5.0开始,默认短信应用外软件不能以写入短信数据库形式发短信..."/> ---- 自定义ContentProvider 我们很少会自己来定义ContentProvider,因为我们很多时候都不希望自己应用数据暴露给 其他应用,虽然这样,学习如何ContentProvider...使用指南: 运行程序后,晾一边,收到短信后,可以logcat上看到该条信息内容,可以根据自己需求 将Activtiy改做Service,而在后台做这种事情~ 小结 关于ContentProvider

49530

Jetpack新成员,App Startup一篇就懂

比如为什么我们可以读取到电话簿联系人、相册照片等数据,借助都是ContentProvider。...这些库都没有提供一个LitePal那样初始化接口,其实就是使用了上述技巧。 看上去如此巧妙技术方案,那么它有没有什么缺点呢?...注意这还只是空ContentProvider耗时,并没有算上你ContentProvider执行逻辑耗时。...这样,当App启动时候会自动执行App Startup库内置ContentProvider,并在它ContentProvider中会搜寻所有注册Initializer,然后逐个调用它们create...这样,LitePal库自己AndroidManifest.xml配置Initializer也会被删除,既然删除了,App Startup启动时候肯定就无法初始化它了。

76220

Android动态替换Application实现

最近做一些Android方面的优化工作,大家知道AndroidClassLoader加载dex文件过程,而AndroidManifestApplication类就在dex文件,Application...这样ProxyApplication.attachBaseContext,调用makeApplication创建RealApplication,并且内部已经完成对于RealApplication...ContentProvidergetContext Application和ContentProvider初始化顺序是:Application.attachBaseContext -> ContentProvider.onCreate...ContentProvider也存在getContext方法,看ContentProvider源代码实现: 其中mContext被赋值有两个地方,一个构造方法,一个是attchInfo时候...可以看出,使用反射调用ContentProvider无参构造方法创建实例,然后调用了attachInfo,传递Context为installProvider方法参数,而installProvider

49130

透过FileProvider来看看四大组件之一ContentProvider

今天就通过它重新看看ContentProvider这个四大组件之一。 Android7.0,Android提高了应用隐私权,限制了应用间共享文件。...也正是因为这个属性为true,Android7.0以下,Android默认是将它当成一个普通ContentProvider,外部无法通过content:// URI来访问文件。...APP启动流程,自动执行所有ContentProviderattachInfo方法,并最后调用到onCreate方法。...实际应用 平时工作,主要有以下以下几种情况和ContentProvider打交道比较多: 和系统一些App通信,比如获取通讯录,调用拍照等。...对于Android开发朋友来说应该是最全面最完整面试资料,为了更好地整理每个模块,参考了很多网上优质博文和项目,力求不漏掉每一个知识点。

75400
领券