Tôi đang tạo ứng dụng truyền nhạc từ máy chủ web. Ứng dụng có dịch vụ nền trước sử dụng MediaPlayer để phát lại.Một MediaPlayer có nên chạy trong chuỗi riêng biệt không?
Mã của tôi được dựa trên ví dụ này: http://developer.android.com/guide/topics/media/mediaplayer.html
Trong ví dụ này, không có gì được luồng ngoại trừ prepareAsync() gọi. Điều làm tôi bối rối là khi tôi đọc về lớp Dịch vụ, tôi tìm thấy thông tin này:
"Thận trọng: Dịch vụ không tạo chủ đề riêng và không chạy trong Điều này có nghĩa rằng, nếu dịch vụ của bạn sẽ thực hiện bất kỳ thao tác hoặc thao tác chặn CPU nào (chẳng hạn như phát lại hoặc nối mạng MP3), bạn nên tạo một chuỗi mới trong dịch vụ để thực hiện công việc đó Bằng cách sử dụng một chuỗi riêng biệt, bạn sẽ giảm nguy cơ lỗi ứng dụng không trả lời (ANR) và chủ đề chính của ứng dụng có thể vẫn dành riêng cho tương tác của người dùng với các hoạt động của bạn. "
Lý do tôi hỏi là ứng dụng một số lần (thường là khi mất kết nối) đóng băng giao diện người dùng khi phát trực tuyến âm thanh. Tôi hoàn toàn hiểu rằng giao diện người dùng bị đóng băng nếu dịch vụ đang làm cho công việc mãnh liệt của CPU, vì hoạt động và dịch vụ chạy trên cùng một luồng. Nhưng, tôi có nên mong đợi MediaPlayer trở nên mãnh liệt không? Nghĩa là, nó có nên chạy trên một sợi riêng biệt không?
readh ere http://stackoverflow.com/questions/8915618/mediaplayer-in-separate-thread-vs-running-in-service-via-startforeground –
Tôi chắc chắn sẽ khuyên bạn không nên thực hiện bất kỳ cuộc gọi chặn nào tới Audiomanager , MediaPlayer, AudioRecord, et al từ chủ đề chính của ứng dụng của bạn. Nếu hệ thống âm thanh tạm thời bị gián đoạn - hoặc dừng hoàn toàn phản hồi - vì lý do nào đó bạn sẽ chỉ kết thúc với ANR trong ứng dụng của mình và báo cáo lỗi không có khả năng hữu ích đối với bất kỳ ai. – Michael
Cảm ơn bạn đã trả lời @Michael! Tôi hoàn toàn đồng ý với bạn về các cuộc gọi chặn đó sẽ chạy trong một chuỗi riêng biệt. Nhưng, tôi có nên mong đợi phát lại phương tiện truyền thông trở thành chặn không? Tôi chỉ không thể tìm được cách để biết liệu trình phát đa phương tiện có đang "chặn" hay những gì đang gây ra điều này hay không. Điều này chỉ xảy ra khi tôi đang truyền trực tuyến qua rtsp khi đi bằng xe hơi hoặc tàu hỏa. Có lẽ việc thay đổi tháp di động có thể là một vấn đề? Hiện tại, tôi đang dựa vào MediaPlayer để giải quyết điều đó, hầu như mọi lúc. – smult