今天犯了一个愚蠢的错误

很久没更新了,今天悄悄更新一下。
最近某熊找到了一份做手机开发的工作,目前主要是做Android平台下的游戏。然后今天老大说要做一下播放BGM的实验。很快的,我写出了这样的代码:


	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		new AsyncPlayer("bgm").play(getApplication(), Uri.fromFile(new File("/sdcard/bgm.mp3")), true, AudioManager.STREAM_MUSIC);
		//balabala...
	}

本来以为没问题的,但是测试的时候发现音乐播放个几十秒就停止了,找不出任何原因!
几乎调试、搜索了一个下午都是无解,就差认为Android有问题用硬件调试器了。后来用手机自带的硬件播放器听歌的时候看到日志上不断的在刷“mAudioStreamOut->write(40960 byte)” 之类的东西,终于明白了:因为AsyncPlayer对象是创建在栈上的!onCreate函数返回以后这个对象就会被GC了,能出声音才有鬼。于是马上修改代码证实了这个设想:

	AsyncPlayer bgm = new AsyncPlayer("bgm");
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		bgm.play(getApplication(), Uri.fromFile(new File("/sdcard/bgm.mp3")), true, AudioManager.STREAM_MUSIC);
		//balabala...
	}

就是这样:-)

>_<|| 我手贱!!这个有问题!绝对有问题!!一般般啦,真的很一般般。还不错哦~小表扬一下!GJ!乃就是新世界的神様了,快去拯救世界吧! (1 votes, average: 5.00 out of 5)
Loading...

6 人次吐槽

  1. davelv说道:
    骑着 Firefox 3.5.12 Firefox 3.5.12 和 Fedora 12 Fedora 12
    Mozilla/5.0 (X11; U; Linux i686; zh-CN; rv:1.9.1.12) Gecko/20100907 Fedora/3.5.12-1.fc12 Firefox/3.5.12

    堆,栈,哦哦~~

  2. iceboy说道:
    骑着 Firefox 4.0 Firefox 4.0 和 Windows 7 Windows 7
    Mozilla/5.0 (Windows NT 6.1; rv:2.0) Gecko/20100101 Firefox/4.0

    为什么是在栈上呢

  3. whitefirer说道:
    骑着 Firefox 3.6.13 Firefox 3.6.13 和 Windows XP Windows XP
    Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13

    错误没有愚蠢与不愚蠢之分

  4. whitefirer说道:
    骑着 Firefox 3.6.16 Firefox 3.6.16 和 Ubuntu 10.04 Ubuntu 10.04
    Mozilla/5.0 (X11; U; Linux i686; zh-CN; rv:1.9.2.16) Gecko/20110323 Ubuntu/10.04 (lucid) Firefox/3.6.16

    没有人吗?

  5. 泽塔说道:
    骑着 Google Chrome 11.0.696.65 Google Chrome 11.0.696.65 和 Windows 7 Windows 7
    Mozilla/5.0 (Windows NT 6.1) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.65 Safari/534.24

    噗。。查BUG查半天发现自己很愚蠢的事情经常会发生的。。

  6. cupenoruler说道:
    骑着 Google Chrome 34.0.1847.137 Google Chrome 34.0.1847.137 和 Windows 7 x64 Edition Windows 7 x64 Edition
    Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.137 Safari/537.36

    噗哈哈哈哈哈哈~~ 栈是不需要GC的~
    你那个AsyncPlayer对象没绑到全局变量,是个野对象,无论是在栈还是在堆,它都只是昙花一现。