我一直在将parcelable
s写入parcel
,而不关注flags字段,这是方法签名中的一个参数,它工作得很好,但我遇到了一个无法再忽略它们的实现:
public static <K extends Parcelable, V extends Parcelable> void write(Parcel dest,
Map<K, V> map, int flags) {
if (map == null) {
dest.writeInt(-1);
} else {
Set<Map.Entry<K, V>> entrySet = map.entrySet();
dest.writeInt(entrySet.size());
for (Map.Entry<K, V> entry : entrySet) {
dest.writeParcelable(entry.getKey(), flags);
dest.writeParcelable(entry.getValue(), flags);
}
}
}
这是我编写的一个map
到parcelable
实用程序/从parcelable
到/从parcelable
实用程序,我想知道在编写它们时,是否应该将标志按原样传递给Key和Value,或者应该为Key传递0,而为Value传递flags
。
我在文档中读到了什么是标志的定义:
PARCELABLE_WRITE_RETURN_VALUE
在API级别1中添加
int PARCELABLE_WRITE_RETURN_VALUE
与writeToparcel(Parcel,int)
一起使用的标志:正在写入的对象是一个返回值,它是“Parcelable someFunction()”、“void someFunction(out Parcelable)”或“void someFunction(inout Parcelable)”等函数的结果。某些实现可能希望在此时释放资源。
常量值:1(0x00000001)
当前唯一存在的标志(parcelable_write_return_value
)用于AIDL接口。它应该提示某些类型的可打包对象,它们正在从IPC方法返回,因此可以释放它们的相关资源。Fot实例,ContentProvider内部包含如下所示的AIDL方法:
ParcelFileDescriptor openFile(String path, int flags);
当您在自定义ContentProvider中重写OpenFile
时,您的方法将返回一个打开的ParcelFileDescriptor……您自己不会关闭它,在进程间传输过程中也不会自动关闭它(在Linux中进程间传递描述符并不意味着关闭它们)。但是描述符没有泄露!相反,ParcelFileDescriptor在写入parcel时关闭自身:
@Override
public void writeToParcel(Parcel out, int flags) {
if (mWrapped != null) {
try {
mWrapped.writeToParcel(out, flags);
} finally {
releaseResources();
}
} else {
if (mCommFd != null) {
out.writeInt(1);
out.writeFileDescriptor(mFd);
out.writeFileDescriptor(mCommFd);
} else {
out.writeInt(0);
out.writeFileDescriptor(mFd);
}
if ((flags & PARCELABLE_WRITE_RETURN_VALUE) != 0 && !mClosed) {
// Not a real close, so emit no status
closeWithStatus(Status.SILENCE, null);
}
}
}
由于ParcelFileDescriptor只是一个普通类,使用binder/parcel的工具在进程之间传递FileDescriptor,您可以想象存在类似的类,它们保留本机资源(内存、文件描述符),并在从类似OpenFile的方法返回时有条件地释放它们。
同样,其他标志也可以用来向可打包的matryoshka下传播类似的条件行为。不幸的是,Android开发人员还没有为引入此类自定义标志定义合理的规则(与IBinder#first_call_transaction
和IBinder#last_call_transaction
)不同,而且AIDL在Android内部之外的实践中没有广泛使用,因此我不知道此类标志的任何示例。
问题内容: public static final Parcelable.Creator CREATOR = new Parcelable.Creator () { public MyParcelable createFromParcel(Parcel in) { return new MyParcelable(in); } 在我的Android课程中,讲师使用了这段代码,他们并没有对此做充分的解
的函数签名提供了以下选项: 我找不到<code>low_memory标志的任何文档。我不知道这些功能是否已经实现,如果是,它们是如何工作的。 具体来说, :如果实现,它是否使用,如果是,它会将单个列存储为memmap或行 :它是否指定了类似的东西来存储在内存中 我们可以将现有的<code>数据帧 附言:相关模块的版本
问题内容: 我正在跟踪在使用时使用该标志的示例,但无法通过帮助系统弄清楚该标志在做什么。 问题答案: 告诉您安装命名模块,以便全局访问它。 但是重要的是要了解它通常仅用于提供命令行实用程序的软件包,以便它们的可执行组件在系统中可用。 如果您有多个程序使用同一软件包,则每个程序都应在本地安装该软件包。如果您确实想通过全局安装来共享已安装的软件包,则还必须使用。 请参阅此处有关全局安装软件包主题的文档
问题内容: HotSpot JVM标志有什么作用,什么时候应该使用它?在64位Java实例上使用它时(相对于未使用它),我会看到什么样的性能和内存使用差异? 问题答案: 默认情况下,去年的大多数HotSpot JVM均已启用它。此选项允许引用在64位JVM中为32位,并访问接近32 GB的堆。(可以使用32位以上的指针)(您也可以拥有几乎无限的堆外内存)。这样可以节省大量内存,并有可能提高性能。
当使用gcc或Clang编译C源代码时,我总是使用标志来生成gdb的调试信息。 gcc-g-o helloworld. c 我注意到有些人推荐使用。和标志之间有什么区别?和之间也有区别吗?
问题内容: 使用mysqli,我可以获得类似这样的字段的信息 我可以使用以下方法从结果中获取字段标志 PHP手册说,这将返回“一个表示该字段的位标志的整数”。但这就是我能找到的所有信息。如何解释位标志?到目前为止,我已经解决了 整数(字段长度无关紧要)根据指定的属性返回以下位标志: 谢谢你的尽心帮助! 问题答案: 参见http://www.php.net/manual/en/mysqli-resu