0

2 つの短い音を連続して再生する Android アプリを作成しようとしています。外出先で音量を調整する必要があり、ステレオ サウンドにする必要があります。つまり、左の音量が大きくなり、右の音量が小さくなることがあります。どうすればそれを達成できますか?以下のように AsyncTask を作成しました。これらのうち 2 つを同時に実行します。それは正しいアプローチですか?

private class PlaySoundTask extends AsyncTask<Void, Void, Void> {

    @Override
    protected void onCancelled() {
        super.onCancelled();
    }

    @Override
    protected void onPreExecute() {

    SoundPool sndPool = new SoundPool(16, AudioManager.STREAM_MUSIC, 100);
    sndPool.load(R.raw.soundOne, 1);

    }

    @Override
    protected Void doInBackground(String... params) {
        while (m_stop_sound) {


            sndPlay.play(R.raw.soundOne, 1, 0, 0);


        }
        return null;
    }
}
4

1 に答える 1

0

いいえ、このアプローチは単純な理由で正しくありません。実行しているバージョンによっては、2 つAsyncTaskの を同時に実行できない場合があります。

https://groups.google.com/forum/?fromgroups#!topic/android-developers/8M0RTFfO7-M

を使用AsyncTask.executeOnExecutor(...)してこの動作をオーバーライドできますが、使用可能なデバイスの約 60% である API 11 以降のシステムをターゲットにします。

http://developer.android.com/about/dashboards/index.html

さらに、AsyncTaskメモリを取得するためにシステムによって簡単に強制終了される可能性があるため、長時間実行される操作用には設計されていません。また、使用されなくなったアクティビティへの参照を保持している場合、メモリ リークが発生する可能性があります。

独自Threadの を使用し、場合によっては を使用しHandlerて UI スレッドに通知します。こちらもご覧ください:

長時間実行オペレーション用の Android AsyncTask

RoboSpice は、AsyncTask のすぐに使える安全な代替手段として提案されています。

于 2013-08-14T23:56:17.387 に答える