de qué sirve MemoryFile en android

Quiero escribir algunos bytes en una memoria compartida. Esto se hace en mi aplicación1. Desde mi otra aplicación: application2 Quiero acceder a esa memoria compartida para leer los bytes escritos. Para este propósito intenté usar la clase de Archivos de memoria de Android. Estoy atascado como la forma de referirme a la misma memoria de fragmentos entre dos aplicaciones diferentes. Ahora también estoy confundido si memoryFile se usa para el mismo propósito o no. http://developer.android.com/reference/android/os/MemoryFile.html este enlace que encontré con respecto al tema. Gracias por adelantado. Krishna

Si desea un uso de proceso MemoryFile con MemoryFile , puede usar el siguiente método fugly :

 import android.os.MemoryFile; import android.os.ParcelFileDescriptor; import java.io.FileDescriptor; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; public class MemoryFileUtil { private static final Method sMethodGetParcelFileDescriptor; private static final Method sMethodGetFileDescriptor; static { sMethodGetParcelFileDescriptor = get("getParcelFileDescriptor"); sMethodGetFileDescriptor = get("getFileDescriptor"); } public static ParcelFileDescriptor getParcelFileDescriptor(MemoryFile file) { try { return (ParcelFileDescriptor) sMethodGetParcelFileDescriptor.invoke(file); } catch (IllegalAccessException e) { throw new RuntimeException(e); } catch (InvocationTargetException e) { throw new RuntimeException(e); } } public static FileDescriptor getFileDescriptor(MemoryFile file) { try { return (FileDescriptor) sMethodGetFileDescriptor.invoke(file); } catch (IllegalAccessException e) { throw new RuntimeException(e); } catch (InvocationTargetException e) { throw new RuntimeException(e); } } private static Method get(String name) { try { return MemoryFile.class.getDeclaredMethod(name); } catch (NoSuchMethodException e) { throw new RuntimeException(e); } } } 

Lo que debería ver es el #getParcelFileDescriptor(MemoryFile) que puede devolver desde una implementación de ContentProvider#openFile(Uri, String) .

Sospecho que los archivos de memoria no tienen el método getParcelFileDescriptor. Cuando comenté esto getParcelFileDescriptor métodos relacionados y uso getFileDescriptor. Funcionó bien.

 import java.io.FileDescriptor; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import android.os.MemoryFile; /** * Invoke hidden methods using reflection * */ public class MemoryFileUtil { private static final Method sMethodGetFileDescriptor; static { sMethodGetFileDescriptor = get("getFileDescriptor"); } public static FileDescriptor getFileDescriptor(MemoryFile file) { try { return (FileDescriptor) sMethodGetFileDescriptor.invoke(file); } catch (IllegalAccessException e) { throw new RuntimeException(e); } catch (InvocationTargetException e) { throw new RuntimeException(e); } } private static Method get(String name) { try { return MemoryFile.class.getDeclaredMethod(name); } catch (NoSuchMethodException e) { throw new RuntimeException(e); } } } 

Y creó el descriptor de archivo desde el archivo de memoria.

 FileDescriptor fd = MemoryFileUtil.getFileDescriptor(memFile); 

MemoryFile se puede utilizar para asignar a la memoria física. El descriptor de archivo de resultado (fd) se puede pasar al cliente (lado de intercambio de memoria). El cliente puede asignar el mismo fd nativo a la misma región de memoria. La memoria se puede compartir utilizando el archivo fd nativo, que se puede asignar a la capa Java mediante InputStream.

Por favor, consulte este enlace para más detalles:
Compartir memoria usando ashem.