在开发音乐播放器的过程中,由于使用了broadcatreveiver,遇到了一些问题
首先说说大致架构,我在activity中有一个musicplayfragment,musicplayfragment中new了一个broadcastreceiver:a
在activity中new了一个service(start启动),service中又new了一个broadcastreceiver:b
当程序打开的时候,判断service是否存在,判断结果:不存在。操作:创建service,然后判断service是否存在,判断结果:“存在。操作:发送广播给service中的receiver:b,
看似很正常的一个顺序,结果却是receiver b根本就没有接受到广播,看了看log,发现,虽然判断service已经存在了,但是service的生命周期方法(oncreate等)都还没有被调用。那么在生命周期中创建的receiver b自然就不存在,也就接受不到广播了。推测:在所有界面都调用完毕了,才会分出cpu去创建service,但是这个时候已经在系统上注册了service
嗯,既然这样,那么我改了一下,在两个receiver中的构造方法中互相发送广播,结果,receiver a发送给b的广播没有反应,receiver b发送给a的广播却有反应,
那么,推测:receiver a比b先创建,与第一个推测类似,等所有界面都调用完毕了,才会调用service的构造方法