Какая польза от MemoryFile в андроиде

Я хочу записать несколько байтов в общую память. Это сделано в моем приложении1. Из моего другого приложения: application2 Я хочу получить доступ к этой общей памяти для чтения записанных байтов. Для этого я попытался использовать класс MemoryFile для Android. Я застрял, как сослаться на один и тот же осколок памяти между двумя разными приложениями. Я также теперь смущен, если memoryFile используется для той же цели или нет. http://developer.android.com/reference/android/os/MemoryFile.html эту ссылку, которую я нашел относительно темы. Заранее спасибо. Кришна

3 ответа

Решение

Если вы хотите использовать несколько процессов с 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),

Я подозреваю, что файлы памяти не имеют метода 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, который может быть сопоставлен с уровнем Java с помощью InputStream.

Пожалуйста, обратитесь к этой ссылке для более подробной информации:
Совместное использование памяти с помощью Ashem.

Другие вопросы по тегам