第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

CountDownTimer 在嘗試重現(xiàn)聲音時(shí)凍結(jié) UI

CountDownTimer 在嘗試重現(xiàn)聲音時(shí)凍結(jié) UI

楊__羊羊 2022-06-15 09:43:32
我試圖從 3 到 1 每秒再現(xiàn) beep.wav 聲音,例如,再現(xiàn) 3 、 2 和 1 的嗶聲,然后在完成時(shí)再現(xiàn) beependsound。出于某種原因,只有 beependsound 正在播放,但是當(dāng)達(dá)到第二個(gè) 3 時(shí),ui 似乎凍結(jié)了一秒鐘,然后數(shù)字快速減少到 0private void stopPlaying(){        if(mp!=null){            try {                mp.reset();                mp.prepareAsync();                mp.stop();                mp.release();                mp=null;            }            catch (Exception e)            {                e.printStackTrace();            }        }    }    private void startCountDown() {        aCounter = new CountDownTimer(10000, 100) {            public void onTick(long millisUntilFinished) {                if (Math.round((float) millisUntilFinished / 1000.0f) != secondsLeft) {                    countDownTxt.setTextColor(getResources().getColor(R.color.white));                    secondsLeft = Math.round((float) millisUntilFinished / 1000.0f);                    countDownTxt.setText(String.valueOf(secondsLeft));                }                if (secondsLeft <= 3) {                    countDownTxt.setTextColor(getResources().getColor(R.color.colorAccent));                    stopPlaying();                    mp = MediaPlayer.create(MainActivity.this, R.raw.beep);                    mp.start();                }            }            public void onFinish() {                secondsLeft = 0;                stopPlaying();                mp = MediaPlayer.create(MainActivity.this, R.raw.beepend);                mp.start();                final Handler handler = new Handler();                handler.postDelayed(new Runnable() {                    @Override                    public void run() {                        aCounter.cancel();                        startCountDown();                    }                }, 1000);            }        };        aCounter.start();    }我認(rèn)為這可以如上所述工作,有什么提示嗎?
查看完整描述

1 回答

?
長(zhǎng)風(fēng)秋雁

TA貢獻(xiàn)1757條經(jīng)驗(yàn) 獲得超7個(gè)贊

MediaPlayer.create()可能是一個(gè)相當(dāng)昂貴的電話??紤]一下如果大約需要 100 毫秒(甚至更多)會(huì)發(fā)生什么:

  1. 計(jì)時(shí)器調(diào)用onTick()。

  2. onTick()內(nèi)部阻塞約 100 毫秒MediaPlayer.create()。

  3. mp開始播放,然后onTick()返回。(到目前為止,一切都很好!)

  4. 立即,計(jì)時(shí)器意識(shí)到另一個(gè)onTick()呼叫到期了!最后一個(gè)開始于 100 毫秒前!

  5. onTick()幾乎立即再次調(diào)用。很快,它就接到了stopPlaying()電話。但是您大約在 1 毫秒前才開始玩!

這會(huì)導(dǎo)致您的計(jì)時(shí)器將所有時(shí)間都花在 中MediaPlayer.create(),而實(shí)際上幾乎沒(méi)有時(shí)間播放聲音。

請(qǐng)注意,使用編寫的代碼,它將嘗試在倒計(jì)時(shí)的最后 3 秒內(nèi)播放大約 30 次聲音(因?yàn)槔硐肭闆r下,滴答聲相隔 100 毫秒)。如果您的意圖是只播放 3 次聲音,您可能希望將第二個(gè)if塊移動(dòng)到第一個(gè)塊內(nèi)。這樣,您僅在secondsLeft實(shí)際更改時(shí)才嘗試播放。這實(shí)際上會(huì)改善最初的問(wèn)題,您可能不需要任何進(jìn)一步的更改。

但是如果你想進(jìn)一步優(yōu)化,請(qǐng)注意你可以mp提前準(zhǔn)備——比如說(shuō),當(dāng)應(yīng)用程序啟動(dòng)時(shí)——然后簡(jiǎn)單地重復(fù)使用它:而不是release()每次都 -ing 它,只是stop()它,prepare()它(而不是 reset()它)。這將為下一場(chǎng)比賽做好準(zhǔn)備。您甚至可以為 單獨(dú)創(chuàng)建一個(gè)MediaPlayer,beepend并且可以在應(yīng)用程序初始化期間同時(shí)準(zhǔn)備它們。


查看完整回答
反對(duì) 回復(fù) 2022-06-15
  • 1 回答
  • 0 關(guān)注
  • 114 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)