mediaplayer - android service 静态变量
迷茫
迷茫 2017-04-17 17:59:26
[Android讨论组]

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

mediaplayer是在service的oncreate中初始化的

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

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回复(2)
怪我咯

在任何时候, 任何组件(指四大组件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上开源项目是怎么实现的

天蓬老师

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

补充内容:

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

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号