android service 静态变量

发布于 2022-09-04 08:22:53 字数 432 浏览 22 评论 0

音乐播放app,在播放service中有一个mediaplayer 静态变量,service启动后,我想从其他activity中取得这个变量,却发现总是null,难道一个service启动过后,他里面的数据都销毁了?

mediaplayer是在service的oncreate中初始化的

其实我是遇到这样的问题:音乐播放app,歌曲列表页面点击一首歌,到播放页面,通过intent传递点击的歌曲信息,同时启动播放service来播放。现在我想在外面的activity加一个正在播放按钮,点击后直接到播放页面,这个时候就没有携带歌曲信息,因此,想着在播放页面的oncreate中做个判断,如果携带了歌曲信息,启动service播放,没有,则只是打开页面,不播放,或继续播放正在播放的歌曲。
我的判断依据就是看service中的mediaplayer是不是null,现在问题就是不管有没有在播放,取到的值都是null

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

不弃不离 2022-09-11 08:22:53

在任何时候, 任何组件(指四大组件Component)间, 不建议使用全局变量来传值, 因为: IPC 机制不允许你这么做!

我猜想你为什么取不到值, 或许跟你使用了Remote Service有关, --- Local Service和主程序在一个进程的, 像你那么取值是没有问题的, 但是Remote Service就跨进程了, 不管你怎么取值都会是null.

正确的做法是: bind 到 Service 上, 然后获取到 ServiceConnection , 通过 ServiceConnection 来操作或者获取想要得到的值.

请参考:
Android Develop > API Guides > 绑定服务
Android Local Service & Remote Service 的区别

p.s. 可以参考下github上开源项目是怎么实现的

甜妞爱困 2022-09-11 08:22:53

既然是静态变量,那就跟类相关,跟对象无关,即跟Service的生命周期无关。
我建议你看一下MediaPlayer的初始化过程,是声明时初始化了,还是在Service的生命周期内初始化了。

补充内容:

  1. 建议贴出代码看一下,重点在于MediaPlayer初始化和又再次被置为null的代码。

  2. 如果MediaPlayer是静态变量,那就只跟类相关,初始化之后又为null,肯定是你代码中哪块逻辑又把它赋值为null了。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文