我完成了我的Android应用程序,一个mp3播放器,但现在我遇到了一些问题,我不确定我是不对。
更简单一点,我将谈谈主要问题。
我有2个活动(节目(主要动作)和效果(均衡器,低音助推器))。
我有一个名为ServicePlayer的服务,用于播放音乐(使用Mediaplayer)
现在,我启动应用程序。
启动计划活动,在此活动中,我启动服务并将其绑定到控制音乐。
我启动效果活动(只需按下Program act上的按钮),在此活动中,我不绑定以前创建的服务。我只是用:
ServicePlayer mSer = new ServicePlayer(); * 注意:我没有在ServicePlayer类中定义任何构造函数,只使用默认构造函数(因此,在创建新的servicelayer对象时没有初始化的变量)。
然后我用:
mSer.stop()// method to stop music in serviceplayer ( just call mediaplayer object to stop)
我在徘徊:
为什么上面的方法可以在效果活动没有绑定的情况下起作用?
代码行(*)是否创建了serviceplayer的新对象?如果是,那么有2个服务器对象可以播放音乐吗?如果不是,那么第一次只创建了一个serviceplayer对象,然后在下一个回调中,没有创建新服务,只是使用之前创建的服务?
如何在不绑定的情况下访问serviceplayer类的数据?实际上,我可以这样做,但我不知道为什么因为没有初始化的serviceplayer变量(请参阅上面的行(*)。
非常感谢你。
更新答案,谢谢Snicolas的帮助:
因为方法stop()将停止静态对象媒体播放器。 (注意:静态成员)。如果它不是静态成员,则会收到NullPointerException。
是的,它创建了一个新对象,但不是新服务。只有1和1个服务(当然,相同的服务)可以启动,当服务启动时,下一个startService或bindService方法回调将不会创建新服务。只需使用旧服务。
原始变量,即使是String,枚举类型也可以正常访问,但这不是之前启动的服务数据,即来自您创建的新对象的数据。对于对象类型,如果不在构造函数中初始化,则会发生NullPointerException。但是,您可以访问静态成员数据。
这就是我现在所理解的,当然,这可能是错的或不够的。如果你能贡献,请。
答案 0 :(得分:1)
以下是一些答案: