为何DebugPrint播放状态语句会影响MPMusicPlayer通知触发?
问题原因与解决办法
为啥会出现这奇葩情况?
这是MPMusicPlayerController的内部机制导致的:systemMusicPlayer虽然是单例,但光调用beginGeneratingPlaybackNotifications()还不够——如果没触发它的完整初始化流程,系统根本不会真正建立起和系统音乐播放器的状态监听绑定。
而访问playbackState这个属性,刚好触发了播放器实例的内部初始化,让它完成和系统音乐服务的连接,这时候开启的通知开关才会真正生效,后续状态变更的通知才能被正常捕获。
说白了就是:开了通知的开关,但播放器还没“开机”,读一下状态才会让它真正启动,开关才能起作用。
怎么解决?
不需要留着那行调试打印,只要在注册通知前,主动触发一下初始化就行,比如加一行无意义的属性访问:
// 仅触发播放器初始化,不需要打印 _ = musicPlayer.playbackState
这样哪怕删掉debug打印,状态变更通知也能正常触发了。另外尽量在主线程操作MPMusicPlayerController相关逻辑,避免在后台队列里搞,防止出现其他奇怪问题。
内容的提问来源于stack exchange,提问作者erotsppa
相关产品推荐
相关产品推荐

