Android体系结构
Android启动过程
ContentProvider进程间如何共享数据的,数据存在哪里?
1,一个程序可以通过实现一个ContentProvider的抽象接口将自己的数据完全暴露出去,而且ContentProvider是以类似数据库中表的方式将数据暴露的。那么外界获取其提供的数据,也就应该与从数据库中获取数据的操作基本一样,只不过是采用URL来表示外界需要访问的“数据库”。
2,ContentProvider提供了一种多应用间数据共享的方式。ContentProvider是个实现了一组用于提供其他应用程序存取数据的标准方法的类。应用程序可以在ContentProvider中执行如下操作:查询数据、修改数据、添加数据、删除数据。
3,标准的ContentProvider:Android提供了一些已经在系统中实现的标准,比如联系人信息,图片库等等,可以用这些ContentProvider来访问设备上存储的联系人信息、图片等等。
4,在ContentProvider中使用的查询字符串有别于标准的SQL查询,很多诸如select、add、delete、modify等操作都使用一种特殊的URL进行,这种URL由3部分组成,“content://”,代表数据的路径和一个可选的表示数据的ID。
content://media/internal/images 这个URL将返回设备上存储的所有图片
content://contacts/people/ 这个URL将返回设备上的所有联系人信息
content://contacts/people/9 这个URL返回单个结果(联系人信息中ID为9的联系人记录)
5,如果想要存储字节型数据,比如位图文件等,那保存该数据的数据列其实是一个表示实际保存保存文件的URL字符串,客户端通过它来读取对应的文件数据,处理这种数据类型的ContentProvider需要实现一个名为_data的字段,_data字段列出了该文件在Android文件系统上的精确路径。这个字段不仅是供客户端使用,而且也可以供ContentResolver使用。客户端可以调用ContentResolver.openOutputStream()方法来处理该URL指向的文件资源,如果是ContentResolver本身的话,由于其持有的权限比客户端要高,所以它能直接访问该数据文件。
ContentProvider使用Android文件系统或者SQLite数据库来保持数据,但是也可以以任何方式来存储。本例用SQLite数据库来保持数据。
Application
Application Framework
ActivityManager WindowManager ContentProvider ViewSystem NotificationManager
PackageManager TelephonyManager ResourceManager LocationManager XMPPService
libraries Android Runtime(core libraries 、Dalvik VM)
Linux kernel 各种driver
系统调用 用户->kernel
book:
Linux内核设计与实现 深入理解linux
MVC、MVP、MVVM三种分层架构
https://gank.io/post/5e50eaf6a4f7880ef87b35f2
Multidex(二)之Dex预加载优化
https://www.jianshu.com/p/2891599511ff
按照动态加载区分可以区分为两类:
插件化 热修复 组件化 模块化 热修复 模块化是大小公司都会使用的技术,而组件化和插件化基本是中大型公司会采用, 组件化:强调功能拆分,单独编译,单独开发。 模块化: 主要是UI复用,工具类复用,基础库复用。 插件化:不同apk 进程通信。 热修复: 强调功能修复。