1

Gingerbread 2.3.4では、SDカードのアンマウントに失敗することがあります。ログを確認したところ、メディアサーバーはまだsdcard内のいくつかのファイルにアクセスしており、voldがメディアサーバーでSIGKILLをスローした場合でも、メディアサーバーはゾンビプロセスに変わり、アンマウント操作は失敗します。

失敗の原因は、MediaScannerがSDカード内のファイルへの参照を保持しているオブジェクトへの参照をまだ保持していることだと思います。MediaScannerは、メディアファイルからアルバムアートを抽出するためにMediaProviderで使用されます。ただし、アルバムアートの抽出操作がすでに終了している場合でも、MediaScannerはガベージコレクタによってリリースされません。そして、この状態でアンマウント操作を行うと、必ずアンマウント操作が失敗します。SDカードをアンマウントする前にMediaScannerがリリースされても失敗しません。

私が行ったことは、 MediaScannerクラスにrelease()関数を追加したことです。この関数は、アルバムアートの抽出が完了すると、 MediaProviderによって呼び出されます。release()関数内で、native_finalize()を呼び出します。変更後、SDカードを正常にアンマウントできます。

MediaScannerの元のソースコードでは、MediaScannerによって参照されるオブジェクトはfinalize()関数内で解放されます。

あなたの誰かが私の同じ問題を経験しましたか?私が上で述べたこと以外に他の回避策はありますか?

フィードバックをいただければ幸いです。

よろしく、
artsylar

4

0 に答える 0