使用AsyncTask进行PCM AudioTrack播放而不冻结活动
问题描述:
我可能需要一些帮助。这里是问题以及我迄今为止所做的。使用AsyncTask进行PCM AudioTrack播放而不冻结活动
问题:
我要玩,我之前录制的PCM文件。由于这个文件可以更大,我使用audiotrack播放它。这工作相当不错。但我不希望活动冻结。我已经尝试过线程等,现在即时通讯工作在asynctask,但活动仍然没有响应。
这是我的了:
在UI活动,我创建了一个新的waveplayer对象,并尝试运行它。
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
/**
* Handles ShortClicks for ListView
*/
OnItemClickListener itemlistener = new OnItemClickListener(){
MediaPlayer mp=null;
String currentlyplaying = null;
@Override
public void onItemClick(AdapterView<?> adaptview, View clickedview, int position,
long id) {
String pathtofile = (String) adaptview.getItemAtPosition(position);
if(pathtofile.contains(".wav"))
{
//HQ!
if(mp==null)
{
clickedview.setSelected(true);
try
{
WavePlayer t = null;
//TODO: //add thread waveplayer to play file!
try {
t = new WavePlayer(pathtofile);
t.execute((Void)null);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
clickedview.postDelayed(new Deselector(clickedview, t), 1000);
currentlyplaying = pathtofile;
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
}
}
else
{
}
}
else{
//NO HQ
//you dont need to know that :)
}
}
};
类deselector:
/**
* This Runnable tries to deselect the view after playing the audio file.
* @author quant
*
*/
class Deselector implements Runnable
{
View view = null;
AsyncTask thread;
Deselector(View view, AsyncTask t)
{
this.view = view ;
this.thread = t;
}
@Override
public void run() {
// TODO Auto-generated method stub
try {
view.setSelected(false);
thread.cancel(true);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
一切有关播放的作品很好,我能听到我的声音和本身工作正常播放...但还是在主要活动,GUI也冻结/是未响应。
希望有人能帮忙。
由于事先
马库斯
答
我通过使用远程服务来解决它。我对这个解决方案感到满意,因为我还有一个用于其他目的。现在界面再次响应。
非常感谢你的编辑,代码标记根本不工作对我来说太棒了:( – mad 2010-12-15 12:46:47
复制到eclipse,ctrl + i,并返回:') – 2010-12-15 12:50:19
本来这是来自我的日食..:D – mad 2010-12-15 13:00:20