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