Android7.0手機程式保活(附源碼下載)

來源:互聯網
上載者:User

標籤:前台   odi   一個   一鍵   com   source   放音   xtend   輸入   

項目地址,求star
https://github.com/979451341/AppAlive

本人在學習音視頻時無意發現的黑科技,發現在使用AudioTrack播放音樂時,使用手機的一鍵清理髮現程式還在,我指的是Activity還活著。

我當時就想起來了酷狗音樂也是這樣,當我沒有播放音樂時,這個酷狗音樂通過我一鍵清理會死掉,如果我播放音樂再一鍵清理就不會死,而且它還有前台通知存活,但是如果暫停音樂再一鍵清理還是會死。

我再說說我的程式

我在raw檔案下放了一個pcm檔案,然後播放這個pcm

                DataInputStream dis = new DataInputStream(                        new BufferedInputStream(getResources().openRawResource(R.raw.a)));                // 執行個體AudioTrack                AudioTrack track = new AudioTrack(AudioManager.STREAM_MUSIC,                        mFrequence,                        mPlayChannelConfig, mAudioEncoding, bufferSize,                        AudioTrack.MODE_STREAM);                track.setStereoVolume(0,0);                // 開始播放                track.play();

其中我還通過track.setStereoVolume(0,0);將播放pcm檔案時的音量調成0,也就是靜音

還有就是播放這個pcm是不斷迴圈的,而且是處於背景,所以我使用了AsyncTask來調控這個進程,通過mIsPlaying來控制這個播放的停止

class PlayTask extends AsyncTask<Void,Void,Void> {    @Override    protected Void doInBackground(Void... arg0) {        mIsPlaying = true;        for(;mIsPlaying;){            int bufferSize = AudioTrack.getMinBufferSize(mFrequence,                    mPlayChannelConfig, mAudioEncoding);            short[] buffer = new short[bufferSize ];            try {                // 定義輸入資料流,將音頻寫入到AudioTrack類中,實現播放                DataInputStream dis = new DataInputStream(                        new BufferedInputStream(getResources().openRawResource(R.raw.a)));                // 執行個體AudioTrack                AudioTrack track = new AudioTrack(AudioManager.STREAM_MUSIC,                        mFrequence,                        mPlayChannelConfig, mAudioEncoding, bufferSize,                        AudioTrack.MODE_STREAM);                track.setStereoVolume(0,0);                // 開始播放                track.play();                // 由於AudioTrack播放的是流,所以,我們需要一邊播放一邊讀取                while (mIsPlaying && dis.available() > 0) {                    int i = 0;                    while (dis.available() > 0 && i < buffer.length) {                        buffer[i] = dis.readShort();                        i++;                    }                    // 然後將資料寫入到AudioTrack中                    track.write(buffer, 0, buffer.length);                }                // 播放結束                track.stop();                dis.close();            } catch (Exception e) {                // TODO: handle exception                Log.e("slack","error:" + e.getMessage());            }        }        return null;    }    protected void onPostExecute(Void result) {    }    protected void onPreExecute() {    }}

對於AudioTrack佔住資源能夠使得app在android7.0的手機一鍵清理下存活,這個原理在下不懂,求大神留言教教在下

還有我實驗的時候用了android7.0的華為,程式通過一鍵清理可以不死,但是在android7.2的魅族的一鍵清理下還是死了,果然定製記憶體管理就是強大

Android7.0手機程式保活(附源碼下載)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.