В Gingerbread 2.3.4 бывают случаи, когда при отключении SDCard происходит сбой . Когда я проверил журнал, медиа-сервер все еще обращается к некоторым файлам на SD-карте и даже vold throw SIGKILL на медиа-сервере, медиа-сервер просто превратится в зомби-процесс и операция размонтирования все равно не удалась.
Я думаю, что причиной сбоя является то, что MediaScanner по-прежнему содержит ссылки на объекты, которые содержат ссылку на файл в SDCard. MediaScanner используется в MediaProvider до для извлечения обложки альбома из медиа-файла. Однако даже если операция извлечения обложки альбома уже завершена, MediaScanner по-прежнему не освобождается сборщиком мусора . И когда операция размонтирования выполняется в этом состоянии, операция размонтирования обязательно завершится неудачей. Он не завершится с ошибкой, когда MediaScanner будет выпущен перед отключением SDCard.
Я добавил функцию release () в классе MediaScanner , которая будет вызываться MediaProvider после завершения извлечения обложки альбома. , Внутри функции release () она будет вызывать native_finalize () . После изменений я могу успешно размонтировать SDCard.
В исходном коде MediaScanner объекты, на которые ссылается MediaScanner , освобождаются внутри функции finalize () .
Кто-нибудь из вас испытывал такую же проблему с моим? Есть ли другой способ, кроме того, что я упомянул выше?
Любая обратная связь будет принята с благодарностью.
С уважением,
artsylar