我对内容提供商有疑问..我们知道绑定器无法传输大量数据(〜> 3MB),但即使是内容提供商也使用绑定器IPC权限,这可能涉及> 3 MB传输? 或内容提供者直接读取调用者进程内存空间内的数据库,并且不涉及IPC?
请纠正我的理解。
答案 0 :(得分:4)
在最低级别,内容提供程序使用CursorWindows,它基于共享内存(ashmem)。
查看AOSP源文件frameworks/base/libs/androidfw/CursorWindow.cpp
,最低级别的C ++代码似乎没有对共享内存大小施加任何限制,除了从系统级ashmem和mmap服务继承的那些。
下一个代码层frameworks/base/core/jni/android_database_CursorWindow.cpp
似乎也没有对光标窗口大小施加任何限制。
Java代码frameworks/base/core/java/android/database/CursorWindow.java
从Android框架内部配置值config_cursorWindowSize
读取缓冲区大小,默认情况下至少在KitKat中似乎是2048。因此,在KitKat中,如果使用普通的Java接口,则最大CursorWindow大小为2 Mb。但是,如果直接使用C ++中的androidfw/CursorWindow.h
,使用AOSP标头,则可以使用更大的CursorWindows。 (请注意,仅使用NDK是不够的,因为CursorWindow不是NDK API的一部分。)