当然,我有一个音乐服务,它负责在后台播放音乐,还有一些其他的事情,比如通知需要进行 UI 更改的活动、存储和恢复队列、通过光标获取歌曲记录,以及每个当歌曲发生变化时,它会负责更新正在进行的通知中的位图。
问题是什么?该服务几乎在用户尝试做任何事情的时候都崩溃了……几乎所有其他事情。例如,播放歌曲,然后打开游戏会导致服务崩溃,有时像在 chrome 上浏览网页这样的轻量级操作也会导致服务崩溃。
一些细节:
1 -服务是通过startService(new Intent(this, MyMusicService.class));
但当用户离开活动时启动的,我打电话startForeground(mId, mNotification);
来显示一个提供简单控制的持续通知,并且因为startForeground()
它的目的是为了应该优先考虑的服务,因为 activityManager 杀死这些服务会破坏用户体验(如果服务被终止,音乐将停止)
2 -我试图重现崩溃,并且它肯定会发生在不那么繁重的工作时,比如在 chrome 上浏览(这将重现崩溃几乎 50% 的时间),并且总是在执行诸如启动 Temple run 2 之类的事情时。仅供参考,如果根本不做任何事情 - 只是在后台播放音乐并处于空闲状态,播放根本不会停止,而且它按预期的方式工作。
3 -我用作测试设备的手机绝不是慢速或低内存设备,它是 Galaxy Nexus。
4 -我试过抓几个多头,有时它只是说:
02-24 06:53:32.586: I/ActivityManager(387): Process com.deadpixels.light.player (pid 27720) has died.
没有任何其他消息,有时相同的消息会伴随着 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}
我还注意到,几乎总是在崩溃发生时,许多其他服务“死掉”。我在这里附上完整的日志。
5 -我尝试使用ACRA来获取有关崩溃的更多信息,但即使一切似乎都设置正确,但在崩溃后没有发送日志,或者什么也没发生。我知道 ACRA 检测到崩溃并启动:
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).
但没有发送任何内容,既没有发送到我设置的 mailto,也没有发送到 Google 文档中的表单。
不知道还有什么可以尝试的,我希望能得到一些关于寻找什么的好主意。正如我所说,该服务确实做了一些事情,据我所知,这并不是资源丰富,老实说,我什至不确定这是否与崩溃的服务有关。
这是服务中发生的几个代码位的要点,以及我设置的 ACRA 代码。还值得注意的是,我试图重现该服务与其他音乐播放器的崩溃,但我根本没有遇到这个问题。
谢谢您的帮助!