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