我正在尝试创建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;
}
}
答案 0 :(得分:0)
不,这种方法不正确的原因很简单。根据您运行的版本,两个AsyncTask
可能无法同时运行:
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
并可能使用Handler
来通知UI线程。另外看看这里:
Android AsyncTask for Long Running Operations
建议将RoboSpice作为AsyncTask的开箱即用安全替代方案。