Android MediaScanner завершить () - PullRequest
       14

Android MediaScanner завершить ()

1 голос
/ 12 октября 2011

В 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

...