Tôi có một dịch vụ âm nhạc đảm nhiệm phát lại nhạc trong nền khóa học và cũng có một vài điều khác như thông báo các hoạt động thay đổi giao diện người dùng cần thực hiện, lưu trữ và khôi phục hàng đợi, lấy bản ghi bài hát thông qua một con trỏ, và mỗi khi bài hát thay đổi nó sẽ chăm sóc cập nhật bitmap trên thông báo đang diễn ra.Tai nạn dịch vụ gỡ lỗi
Sự cố là gì? Dịch vụ gặp sự cố hầu như mọi lúc người dùng cố gắng .. vẫn còn khá nhiều thứ khác. Ví dụ, chơi một bài hát, và sau đó mở một trò chơi treo dịch vụ, đôi khi những thứ ánh sáng như duyệt web trên chrome cũng sẽ sụp đổ.
Một vài chi tiết:
1 - Dịch vụ này được bắt đầu qua startService(new Intent(this, MyMusicService.class));
nhưng khi người dùng rời khỏi hoạt động tôi gọi startForeground(mId, mNotification);
để hiển thị một thông báo liên tục cung cấp các điều khiển dễ dàng, và cũng vì startForeground()
là intented cho các dịch vụ đó nên được ưu tiên như việc giết hại những bởi activityManager sẽ gây rối cho kinh nghiệm người dùng (âm nhạc dừng lại nếu dịch vụ này được giết)
2 - tôi đã cố gắng để tái tạo vụ tai nạn, và chắc chắn nó sẽ xảy ra khi thực hiện không quá công việc nặng nhọc, giống như duyệt trên chrome (điều này sẽ tái tạo gần 50% thời gian), và luôn luôn khi thực hiện những việc như khởi chạy đền 2. FYI, nếu không làm gì cả - chỉ phát nhạc trên nền và nhàn rỗi, phát lại sẽ không phải là dừng lại ở tất cả, và nó hoạt động theo cách nó dự định.
3 - Điện thoại tôi đang sử dụng làm thiết bị kiểm tra không phải là thiết bị nhớ chậm hoặc thấp, đó là Galaxy Nexus.
4 - tôi đã cố gắng bắt một vài chờ đợi và đôi khi nó chỉ đơn giản nói:
02-24 06:53:32.586: I/ActivityManager(387): Process com.deadpixels.light.player (pid 27720) has died.
mà không cần bất kỳ tin nhắn khác, và đôi khi cùng một thông điệp được đi kèm với một WINDEATH:
02-24 06:53:32.586: W/ActivityManager(387): Scheduling restart of crashed service com.deadpixels.light.player/.service.MyMusicService in 5000ms
02-24 06:53:32.602: W/InputDispatcher(387): channel '418d09c8 com.deadpixels.light.player/com.deadpixels.light.player.HomeActivity (server)' ~ Consumer closed input channel or an error occurred. events=0x9
02-24 06:53:32.602: E/InputDispatcher(387): channel '418d09c8 com.deadpixels.light.player/com.deadpixels.light.player.HomeActivity (server)' ~ Channel is unrecoverably broken and will be disposed!
02-24 06:53:32.602: W/InputDispatcher(387): Attempted to unregister already unregistered input channel '418d09c8 com.deadpixels.light.player/com.deadpixels.light.player.HomeActivity (server)'
02-24 06:53:32.602: I/WindowState(387): WIN DEATH: Window{418d09c8 u0 com.deadpixels.light.player/com.deadpixels.light.player.HomeActivity}
Điều tôi cũng nhận thấy là hầu như luôn luôn khi xảy ra sự cố, rất nhiều dịch vụ khác "die". Tôi đang đính kèm nhật ký đầy đủ here.
5 - tôi đã cố gắng sử dụng ACRA để có được thêm thông tin về vụ tai nạn nhưng mặc dù tất cả mọi thứ dường như được thiết lập một cách chính xác, sau khi đâm nhật ký không được gửi đi, hoặc chỉ có gì xảy ra. Tôi biết ACRA phát hiện vụ tai nạn và bắt đầu:
02-24 06:53:37.719: D/ACRA(28293): ACRA is enabled for com.deadpixels.light.player, intializing...
02-24 06:53:37.742: D/ACRA(28293): Using default Mail Report Fields
02-24 06:53:37.742: D/ACRA(28293): Looking for error files in /data/data/com.deadpixels.light.player/files
02-24 06:53:37.742: W/ACRA(28293): com.deadpixels.light.player reports will be sent by email (if accepted by user).
nhưng không được gửi, không phải đến mailto tôi đặt, hoặc mẫu tại tài liệu của Google.
Bạn không chắc chắn nên thử gì khác và tôi đã hy vọng có được một số ý tưởng hay về những gì cần tìm. Như tôi đã nói, dịch vụ này thực hiện một vài điều, mà kiến thức của tôi không phải là tài nguyên mở rộng, và thành thật mà nói, tôi thậm chí không chắc chắn nếu nó là bất cứ điều gì để làm với các dịch vụ đó là crashing.
Dưới đây là một số gist của một số bit mã diễn ra trong dịch vụ và mã ACRA tôi đã thiết lập. Nó cũng đáng chú ý là tôi đã cố gắng để tái sản xuất các dịch vụ bị rơi với người chơi âm nhạc khác và tôi đã không chạy vào vấn đề ở tất cả.
Cảm ơn sự giúp đỡ!
Tôi thực sự đang trở START_STICKY trong onStartCommand rồi. Theo như onCreate, tôi bắt đầu chơi, nhưng tôi không thể gọi chuẩn bị kể từ khi dịch vụ được bắt đầu ngay cả trước khi âm nhạc được yêu cầu để chơi và do đó tôi không biết con đường mà bài hát tôi nên vượt qua. Ngoài ra, tôi cũng thêm thông báo trên thanh trạng thái khi một bài hát đang phát, tôi không chắc liệu bạn có đạt được điểm cao nhất trong bài viết mà tôi đã đăng hay không. Tuy nhiên tôi sẽ xem xét mua một wakelock mà tôi không nghĩ rằng tôi cần thiết vì nó đã chơi nhạc trong bg cho như 30 phút thời gian trong khi tôi đã không sử dụng điện thoại. –
Trong liên kết 'gist', tôi không thấy bất kỳ triển khai 'onStart' hoặc 'onStartCommand' nào, tại sao tôi hỏi :) Nếu bạn đang gọi 'startForeground' trong onCreate của dịch vụ, khóa đánh thức một phần chỉ hữu ích khi bạn muốn chơi ngay cả khi thiết bị đang ngủ. 'StartForeground' nên đã ngăn chặn việc giết chết dịch vụ khi thiết bị không ngủ. Bạn đã kiểm tra việc triển khai phương thức onReceive của mình trong bộ thu phát sóng của Dịch vụ chưa? Chúng phải chạy nhanh; nếu không, quá trình của bạn có thể bị giết. –
Xin chào, bạn nói đúng, tôi không bao gồm onStartCommand, tôi đã thêm ngay bây giờ khi tôi cập nhật ý chính. Ngoài ra, tôi gọi startForeground chỉ khi rời khỏi hoạt động (tức là khi về nhà, hoặc một hoạt động khác) và gọi stopForeground (true) khi tiếp tục. Theo như onReceive, không chắc chắn làm thế nào tôi có thể kiểm tra để xem nếu nó chạy một cách nhanh chóng hay không. Tôi đã thêm một vài bit của onReceive vào gist –