我的问题是一个黑暗的镜头:Android 4.x / Jelly Bean的交易是什么?服务,粘性,前景等是否存在已知问题?
Backstory :我在各种Android设备和模拟器上成功测试了我的音乐播放器应用程序,然后最近在物理Jelly Bean设备(Samsung Rugby Pro)上测试了我的音乐播放器应用程序。我发现当屏幕关闭时,MediaPlayer
onCompletion
功能不被持续触发。大多数情况下,几分钟不会被解雇。当屏幕打开时,无论我的活动是否显示,应用程序都可以正常工作。
(Gingerbread,KitKat,Lollipop或Marshmallow都没有问题。我有这些版本的物理设备,它们都能完美运行。)
设备信息:
答案 0 :(得分:0)
我想出来了;我希望这对你有帮助......
问题是不在触发onCompletion
事件时,而是reset()
无限期地阻止。我之前将此归因于Android issue #959: MediaPlayer "crash" (deadlocks the calling thread) when resetting or releasing an unused MediaPlayer,这对我的情况不正确。
我的特殊问题是我的测试设备上的侵略性睡眠行为。当我使用其他几个应用程序在飞行模式下运行时会弹出此错误,因为对reset()
(或release()
)的调用也会释放MediaPlayer
实例WakeLock
。一旦发生这种情况,设备就会睡眠,代码似乎会阻塞该功能。我无法通过附加和/或插入调试器来重现这一点,因为其中任何一个都阻止了设备进入睡眠状态!
我的解决方案是创建一个单独管理的WakeLock
,我acquire()
基本上在播放开始时release()
在所有歌曲播放完毕后播放。WakeLock
从技术上讲,我只在活动暂停时才这样做,并且在恢复时释放,因为当设备处于唤醒状态时,不需要按住PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE);
WakeLock wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "MyTag");
wakeLock.acquire();
。
.buttonColor:active {
color: #ffff00;
}