Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/224.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在移动中调整声池音量?_Android_Android Asynctask_Soundpool - Fatal编程技术网

Android 如何在移动中调整声池音量?

Android 如何在移动中调整声池音量?,android,android-asynctask,soundpool,Android,Android Asynctask,Soundpool,我正在尝试创建一个android应用程序,它将连续播放两个短声音。我必须在路上调整音量,而且应该是立体声。我的意思是,左边的音量可能会变大,而右边的音量可能会变小。我怎样才能做到这一点?我已经创建了一个AsyncTask,如下所示,我将同时运行其中两个。这是正确的方法吗 private class PlaySoundTask extends AsyncTask<Void, Void, Void> { @Override protected void onCancel

我正在尝试创建一个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;
    }
}
私有类PlaySoundTask扩展了AsyncTask{
@凌驾
受保护的void onCancelled(){
super.onCancelled();
}
@凌驾
受保护的void onPreExecute(){
SoundPool sndPool=新的SoundPool(16,AudioManager.STREAM_MUSIC,100);
sndPool.load(R.raw.soundOne,1);
}
@凌驾
受保护的Void doInBackground(字符串…参数){
while(m_stop_sound){
sndPlay.play(R.raw.soundOne,1,0,0);
}
返回null;
}
}

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

您可以使用
AsyncTask.executeOnExecutor(…)
来覆盖此行为,但您仍将以API 11开始的系统为目标,该系统约占可用设备的60%:

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

使用您自己的
线程
并可能使用
处理程序
通知UI线程。请看这里:

其中,建议使用RoboSpice作为异步任务的现成安全替代方案