我对内容提供商有疑问。我们知道绑定不能传输大量的数据(~>3MB),但是即使内容提供商也使用绑定IPC的权利,这可能涉及>3MB的传输?或者内容提供者在调用者进程内存空间内直接读取数据库,而不涉及IPC?
请纠正我的理解。
发布于 2014-12-09 20:54:03
在最低级别,内容提供者使用基于共享内存(ashmem)的CursorWindows。
查看AOSP源文件frameworks/base/libs/androidfw/CursorWindow.cpp
,除了从系统级ashmem和mmap服务继承的内存大小之外,最低级别的C++代码似乎没有对共享内存大小施加任何限制。
下一个代码层frameworks/base/core/jni/android_database_CursorWindow.cpp
似乎也没有对光标窗口大小施加任何限制。
frameworks/base/core/java/android/database/CursorWindow.java
代码从Android框架内部配置值config_cursorWindowSize
读取缓冲区大小,在默认情况下,至少在KitKat中是2048。因此,在KitKat中,如果使用普通的CursorWindow接口,最大CursorWindow大小为2MB。但是,如果您直接使用来自androidfw/CursorWindow.h
的C++,使用AOSP头,那么您可以使用更大的CursorWindows。(请注意,仅仅使用NDK是不够的,因为CursorWindow不是NDK的一部分。)
https://stackoverflow.com/questions/21933118
复制相似问题