我想一些字節寫入共享內存使用MemoryFile的。這是在我的應用程序1中完成的。從我的另一個應用程序:application2我想訪問該共享內存來讀取寫入的字節。爲此,我嘗試使用android的MemoryFile類。我被困在如何在兩個不同的應用程序之間引用相同的碎片內存。如果memoryFile用於相同的目的,我現在也感到困惑。 http://developer.android.com/reference/android/os/MemoryFile.html這個環節,我發現關於該主題的。 在此先感謝。 克里希納什麼是Android
回答
如果你想要一些與MemoryFile
跨進程使用,你可以使用下面的的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);
}
}
}
什麼,你應該看的是#getParcelFileDescriptor(MemoryFile)
方法,你可以從一個實現返回的ContentProvider#openFile(Uri, String)
。
我懷疑我的代碼在MemoryFile.class.getDeclaredMethod(「getParcelFileDescriptor」)拋出異常;但它並沒有真正轉到catch條款我知道只有在放置斷點後 –
我真的不明白它。如果你所做的只是通過FD,爲什麼要使用ashmem呢?你可以只用ParcelFileDescriptor.createPipe()和寫你想跨越任何本地數據。不需要灰塵。 –
我懷疑內存中的文件沒有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層。
請參考此鏈接瞭解詳情:
Sharing memory using ashem.
- 1. 什麼是Android
- 2. 什麼是android
- 3. 什麼是Android
- 4. 什麼是Android
- 5. 什麼是Android
- 6. 什麼是Android
- 7. 什麼是android
- 8. 什麼是Android
- 9. 什麼是android?
- 10. 什麼是Android
- 11. 什麼是Android的
- 12. 什麼是android multidex?
- 13. 什麼是Uri.parse android
- 14. Android。什麼是android:popupPromptView?
- 15. 什麼是Android的
- 16. 什麼是Android的
- 17. 什麼是Android PDK?
- 18. Android:什麼是LayoutAnimation?
- 19. 什麼是Android SDK?
- 20. 什麼是Android中
- 21. 什麼是android DPI
- 22. Android - 什麼是PendingIntent?
- 23. Android這是什麼視圖?
- 24. Android Gradle:什麼是javaMaxHeapSize「4g」?
- 25. 什麼是Android Studio中
- 26. 在android中什麼是OBB
- 27. 什麼是Android中的JobService
- 28. Android中的adb是什麼?
- 29. 什麼是查詢android中
- 30. Android gps是什麼意思?
我認爲「官方」的方式去是使用內容提供商,或使用外部存儲的常規文件。 –
+1的ContentProvider/ContentResolver的 – Guillaume
內容的尺寸較大(3-4 MB),我需要快速讀寫,所以我需要這樣的東西共享內存。如果您可以幫助我瞭解Android中的memoryFile的使用,請另行。 –