0

我正在尝试创建将连续播放两个短声音的 android 应用程序。我必须在旅途中调节音量,它应该是立体声。我的意思是左边的音量可能会变大,而右边的音量可能会变小。我怎样才能做到这一点?我已经创建了一个 AsyncTask 如下,我将同时运行其中两个。这是一个正确的方法吗?

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

不,这种方法是不正确的,原因很简单。根据您运行的版本,两个AsyncTasks 可能无法同时运行:

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

您可以使用AsyncTask.executeOnExecutor(...)来覆盖此行为,但您仍将针对从 API 11 开始的系统,这大约是可用设备的 60%:

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

此外,AsyncTask它不是为长时间运行的操作而设计的,因为它们很容易被系统杀死以检索内存。如果它持有对不再使用的活动的引用,可能会导致内存泄漏。

使用您自己Thread的 s 并可能使用 anHandler来通知 UI 线程。也看看这里:

用于长时间运行操作的 Android AsyncTask

其中 RoboSpice 被建议作为 AsyncTask 的开箱即用的安全替代品。

于 2013-08-14T23:56:17.387 回答