【问题标题】:Are there known issues with Android Services on 4.1.x (Jelly Bean)?4.1.x (Jelly Bean) 上的 Android 服务是否存在已知问题?
【发布时间】:2016-04-29 00:17:30
【问题描述】:

我的问题是一头雾水:Android 4.x / Jelly Bean 是怎么回事?服务、粘性、前景等方面是否存在已知问题?

背景故事:我在各种 Android 设备和模拟器上成功测试了我的音乐播放器应用程序,然后最近又在物理果冻豆设备(Samsung Rugby Pro)上测试了我的音乐播放器应用程序。我发现当屏幕关闭时,MediaPlayer onCompletion 函数不会一直被触发。大多数情况下,它不会在 几分钟 内被触发。当屏幕打开时,无论我的活动是否显示,应用程序都可以正常工作。

(Gingerbread、KitKat、Lollipop 或 Marshmallow 没有问题。我有这些版本的物理设备,它们都可以完美运行。)

设备信息:

  • 操作系统版本:3.0.31-656355
  • 发布:4.1.1
  • 设备:comancheatt
  • 型号:三星-SGH-I547
  • 产品:comancheuc
  • 品牌:三星
  • 显示:JRO03L.I547UCBLL1
  • CPU_ABI:armeabi-v7a
  • CPU_ABI2: armeabi
  • 硬件:qcom
  • ID:JRO03L
  • 制造商:三星
  • 用户:se.infra
  • 主机:SEP-125

【问题讨论】:

  • 这是绑定服务还是已启动服务?
  • 服务启动并绑定在activity的onResume,然后在onPause解除绑定。如果服务没有被使用,那么在onPause 它也会被停止。
  • 是的,感谢我读到的显而易见的内容。该服务仍在运行。我会像大多数关于 SO 的难题一样猜测,在我自己弄清楚之前不会回答这个问题:P

标签: android android-4.1-jelly-bean


【解决方案1】:

我想通了;我希望这对你也有帮助......

问题不是在触发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();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-11
    • 2013-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多