[英]what is the use of MemoryFile in android
我想寫一些字節到共享內存。 這是在我的application1中完成的。 從我的另一個應用程序:application2我想訪問該共享內存來讀取寫入的字節。 為此,我嘗試使用android的MemoryFile類。 我被困在如何在兩個不同的應用程序之間引用相同的分片內存。 如果memoryFile用於相同的目的,我現在也很困惑。 http://developer.android.com/reference/android/os/MemoryFile.html我發現這個主題的鏈接。 提前致謝。 克里希納
method: 如果你想在MemoryFile
中使用一些跨進程,你可以使用以下方法:
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);
}
}
}
您應該看到的是#getParcelFileDescriptor(MemoryFile)
方法,您可以從ContentProvider#openFile(Uri, String)
#getParcelFileDescriptor(MemoryFile)
ContentProvider#openFile(Uri, String)
的實現返回該方法。
我懷疑內存文件沒有getParcelFileDescriptor方法。 當我評論這個getParcelFileDescriptor相關方法並使用getFileDescriptor時。 它工作得很好。
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);
}
}
}
並從內存文件中創建了文件描述符。
FileDescriptor fd = MemoryFileUtil.getFileDescriptor(memFile);
MemoryFile可用於映射到物理內存。 結果文件描述符(fd)可以傳遞給客戶端(內存共享端)。 客戶端可以將相同的本機fd映射到相同的內存區域。 然后可以使用本機fd共享內存,可以使用InputStream將其映射到java層。
有關詳細信息,請參閱此鏈接:
使用ashem共享內存。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.