Phương thức setVideoURI của VideoView trong Android có vẻ như đang chặn chuỗi giao diện người dùng. Ngay sau khi tôi gọi phương thức này, giao diện người dùng bị lag, ngay cả trên các thiết bị nhanh. Có cách nào để cải thiện hiệu suất ở đây không? Chỉ có chủ đề khác với chủ đề mà tôi có thể tìm thấy tại đây:
https://groups.google.com/forum/#!topic/android-developers/eAAEAEDcksM
nhưng nó khá cũ và không có câu trả lời thỏa mãn.Android VideoView setVideoURI chặn chuỗi giao diện người dùng
Trả lời
VideoView myVideoView = (VideoView)findViewById(R.id.myvideoview);
myVideoView.setVideoURI(Uri.parse(url));
myVideoView.setMediaController(new MediaController(this));
myVideoView.requestFocus();
myVideoView.start();
tôi sử dụng mã này có thể nó sẽ giúp bạn
Theo cách nào có nghĩa vụ phải giúp tôi? Tôi đã sử dụng cuộc gọi setVideoURI và đó là nguyên nhân gây ra sự cố về hiệu suất của tôi – Alf
VideoView.setVideoURI() bắt đầu một chủ đề mới để phát lại phương tiện truyền thông, nhưng nó là một phần phương tiện truyền thông giải mã gây thêm delay.The chỉ giải pháp mà có thể được ok cho bạn đang sử dụng một số hacks NDK, nhưng không Worths cho tôi
Thực ra tôi nhận thấy rằng khi kết nối internet chậm, việc chặn trở nên nghiêm trọng hơn nhiều. Điều đó sẽ chống lại việc giải mã là nguồn duy nhất của sự chậm trễ. Hoặc là có một giải thích tại sao giải mã phương tiện truyền thông sẽ chặn nhiều hơn về một kết nối xấu? – Alf
Tôi thực sự không chắc chắn, điều đó phụ thuộc vào những gì bạn đang làm trong nguồn, nhưng nếu kết nối chậm, thì bộ giải mã có nhiều nhân viên hơn để làm, bởi vì nhiều lần tính toán và thực hiện các thao tác thường không vì bộ đệm bị xóa giữa chờ đợi trên các gói –
những gì tôi đã làm là nơi các phương pháp setVideoUri() vào một handler với một looper tức
new Handler(Looper.myLooper()).post(new Runnable(){
@Override
public void run(){
videoview.setVideoUri("uri");
}
});
điều này chạy mã bên ngoài luồng giao diện người dùng chính, nhưng giữ mã trong một looper để mã có thể được thực thi mà không cần ném một ngoại lệ
Tôi đã phát hiện thấy VideoView không chặn luồng giao diện người dùng. Trên thực tế, người nhận chặn chuỗi giao diện người dùng chặn "android.media.VOLUME_CHANGED_ACTION".
mã vấn đề của tôi:
public void setVolume(int volume) {
try {
audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, volume, 0);
ivVoice.setTag(volume != 0);
updateVoiceImage();
} catch (Exception e) {
e.printStackTrace();
}
}
setVolume gọi từ máy thu khối lượng, nó đã được gọi là 1000 lần khi chơi một mp4 5s.
audioManager.setStreamVolume quá dài trong chuỗi chính.
đang giải pháp:
public void setVolume(int volume) {
try {
//if volume not changed , do nothing.
if(volume != lastVolume){
audioManager.setStreamVolume(AudioManager.STREAM_MUSIC,volume,0);
ivVoice.setTag(volume != 0);
updateVoiceImage();
lastVolume = volume;
}
} catch (Exception e) {
e.printStackTrace();
}
}
Vì vậy, hãy kiểm tra thu khối lượng của bạn. Có lẽ nó có thể giúp bạn.
- 1. Thao tác chặn chuỗi giao diện người dùng tiếp tục
- 2. Thử nghiệm Android Junit4 trên chuỗi giao diện người dùng
- 3. Tại sao chỉ có thể chỉ chuỗi giao diện người dùng trong Android cập nhật giao diện người dùng?
- 4. tác vụ và bỏ chặn giao diện người dùng
- 5. Thiết kế giao diện người dùng Android
- 6. Giao diện người dùng lịch trong android
- 7. Tạo thư viện giao diện người dùng Android có giao diện người dùng tùy chỉnh
- 8. NSURLConnection có chặn chủ đề chính/giao diện người dùng
- 9. Bằng văn bản cho giao diện điều khiển đầu ra của Giao diện người dùng Giao diện người dùng Android
- 10. Android: Có thể cho chuỗi nền để chặn cho đến khi chuỗi giao diện người dùng kết thúc hoạt động?
- 11. Kiểm tra đơn vị Android với giải pháp cập nhật giao diện người dùng AsyncTask và giao diện người dùng
- 12. Android Espresso không chờ giao diện người dùng hoàn tất
- 13. Lấy tính toán nặng khỏi Giao diện người dùng Android
- 14. Chủ đề giao diện người dùng động
- 15. Cách cập nhật nhãn giao diện người dùng từ chuỗi không phải là giao diện người dùng trong iOS
- 16. Nhân viên đồng bộ với chuỗi giao diện người dùng
- 17. AsyncTask Không cập nhật trên chuỗi giao diện người dùng
- 18. Rxjava AndroidSchedulers.mainThread() có nghĩa là chuỗi giao diện người dùng?
- 19. API giao diện người dùng cho libgdx
- 20. Cách gỡ lỗi kiểu giao diện người dùng Android
- 21. Công cụ thiết kế giao diện người dùng Android
- 22. Truy cập giao diện người dùng từ JavaScript trên Android
- 23. Android: Chụp ảnh không có giao diện người dùng
- 24. Android - Yếu tố giao diện người dùng tắt màn hình
- 25. setRetainInstance đoạn với giao diện người dùng Android
- 26. Sách về thiết kế Giao diện người dùng Android
- 27. Giao diện người dùng loại hình tròn trong Android?
- 28. Giao diện người dùng điện thoại Android - Thay đổi
- 29. Phát triển giao diện người dùng giao diện người dùng - WPF
- 30. API REST - Giao diện người dùng ALPS (Giao diện người dùng chuyển đổi tương tự)
setVideoURI dường như gọi mMediaPlayer.prepareAsync() nội bộ, vì vậy nó chỉ cần trả lại mà không bị chặn nhưng không được. Vì vậy, việc chuyển sang MediaPlayer từ VideoView cũng sẽ không hữu ích. – Alf
Bạn đã cố gắng để đặt mã của bạn bên trong một asynctask? –
Điều này có xảy ra mỗi khi bạn gọi 'setVideoUri() '? Hay chỉ từ lần thứ hai trở đi? – matiash