2011-01-20 18 views
22

Lỗi mà tôi thấy là trên các cuộc gọi để đặt lại() và release() không bao giờ quay trở lại, do đó rời khỏi ứng dụng của tôi ở trạng thái dừng vô thời hạn. Nó không quan trọng nếu tôi gọi stop() trước khi đặt lại() hoặc release() treo luôn luôn có thể được sao chép.Lỗi MediaPlayer của Android khi sử dụng lệnh reset() và release()

Bất kỳ ai gặp phải bất kỳ sự cố tương tự nào với việc khóa MediaPlayer? Có lời khuyên nào không? Tôi đang làm việc trên một ứng dụng đa luồng.

Các DDMS báo cáo sau khi nhìn vào chủ đề đó đang nắm giữ:

CLASS | PHƯƠNG PHÁP | FILE | LINE | NATIVE

android.media.MediaPlayer _release MediaPlayer.java -2 đúng
android.media.MediaPlayer phát hành MediaPlayer.java 1049 sai

+0

Tôi cũng gặp sự cố này. Có giải pháp nào để khắc phục nó không? – Judy

+0

@Judy chúng tôi chưa bao giờ tìm thấy bản sửa lỗi. Chúng tôi đã thử rất nhiều kết hợp và hack. Cuối cùng, chúng tôi đã chuyển từ sử dụng API phương tiện truyền thông cấp cao nhất của Android. Không được đề xuất cho mọi người nhưng trong trường hợp của chúng tôi, chúng tôi cần toàn quyền kiểm soát phát lại để chúng tôi xây dựng trình phát của mình từ đầu. – Jona

Trả lời

8

Bạn có thể đã tình cờ lỗi này: http://code.google.com/p/android/issues/detail?id=959. Nó đã ngồi trong một thời gian, tôi không mong đợi nó sẽ được giải quyết bất cứ lúc nào sớm, thật không may.

+0

Cảm ơn tôi nghĩ rằng điều này là gần như nó được một câu trả lời ... ít nhất là cho bây giờ ... – Jona

0

Tôi cũng phải đối mặt với vấn đề này trong android 2.2, khi gọi đến MediaRecorder.release();

Thỉnh thoảng nó không phản hồi, luồng chương trình của tôi chỉ bị kẹt trên đó. nó gây đóng băng UI của tôi, và mang ANR sau ....

BTW, khách hàng của tôi nói rằng họ không phải đối mặt với nó khi sử dụng android 2.3.3

này: http://code.google.com/p/android/issues/detail?id=959#makechanges

Và này: http://code.google.com/p/android/issues/detail?id=5047#makechanges

0

Nếu bạn chỉ đơn giản là cố gắng để bắt đầu bài hát/âm thanh từ đầu, bạn có thể viết một hàm reset, mà chỉ đơn giản thực hiện:

mediaplayer.seekTo(0);

Tôi đã thay đổi số stop(); thành: pause, rồi seekTo.

+0

Điều chính là chỉ đơn giản là ngừng phát lại. – Jona

1

Nếu bạn đang phát triển cho API cấp 16 trở lên, tôi khuyên bạn nên sử dụng MediaPlayer và sử dụng Exoplayer từ Google.

Tôi đã làm và không bao giờ nhìn lại. Vì tôi cũng hỗ trợ API cấp 15, tôi có một sự trừu tượng để sử dụng MediaPlayer chuẩn khi ở trong API đó và Exoplayer khi ở trong 16 (hoặc 17 không thể nhớ bây giờ).

Nó không hoàn hảo, nhưng nó tốt hơn rất nhiều và tôi đã nhìn thấy nhiều bộ đệm tốt hơn nhiều.

Các vấn đề liên quan