Android MediaPlayer减慢listview速度
我有一个Android MediaPlayer减慢listview速度,android,listview,android-mediaplayer,Android,Listview,Android Mediaplayer,我有一个列表视图,其中列出了录音。当我点击其中一个播放时,它就会从互联网上消失,检索音频并播放。播放时,滚动锁定 一旦MediaPlayer停止,我可以像正常一样滚动。这不是线程问题,因为MediaPlayer正在另一个线程上播放 这是MediaPlayer的异步任务: private class PlayAudio extends AsyncTask<String, Integer, String> { @Override protected String doIn
列表视图
,其中列出了录音。当我点击其中一个播放时,它就会从互联网上消失,检索音频并播放。播放时,滚动锁定
一旦MediaPlayer
停止,我可以像正常一样滚动。这不是线程问题,因为MediaPlayer
正在另一个线程上播放
这是MediaPlayer的异步任务:
private class PlayAudio extends AsyncTask<String, Integer, String> {
@Override
protected String doInBackground(String... params) {
nowPlaying = true;
player.setOnErrorListener(new MediaPlayer.OnErrorListener() {
@Override
public boolean onError(MediaPlayer mp, int what, int extra) {
if(isAdded()) {
stopAudio();
}
PvmUtils.longToast(context, getString(R.string.error_load_msg));
return false;
}
});
player.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
setButtonColors(2);
}
});
player.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
stopAudio();
sendPostMessageRead(new Callbacks.SendPostMessageReadCallback() {
@Override
public void sendPostMessageReadCallback(boolean gotMessageReadResponse) {
if (gotMessageReadResponse) {
MessageLog message = log.get(listPosition);
message.setMessageStatus("read");
if (message.isReply()) {
currentMetaTextView.setText("");
MyFcmListenerService.newMessages--;
ShortcutBadger.applyCount(context, MyFcmListenerService.newMessages);
}
} else {
Log.d(LOG_TAG, "sendPostMessageReadCallback returned false, error may have occurred");
}
}
});
}
});
player.setAudioStreamType(AudioManager.STREAM_MUSIC);
try {
//Uri uri = Uri.parse(Keys.getpvmURL() + "android/retrieveMessage?messageId=" + params[0]);
//player.setDataSource(params[0].replaceFirst("https","http"));
Uri uri = Uri.parse(params[0]);
Map<String, String> headers = new HashMap<>();
headers.put("authorisation", encryption.getID().toString());
player.setDataSource(context, uri, headers);
} catch (IOException e) {
e.printStackTrace();
stopAudio();
} try {
player.prepare();
} catch (IOException e) {
e.printStackTrace();
stopAudio();
}
player.start();
return null;
}
}
私有类PlayAudio扩展异步任务{
@凌驾
受保护的字符串doInBackground(字符串…参数){
现在玩=真;
player.setOneRorListener(新的MediaPlayer.OneRorListener(){
@凌驾
公共布尔onError(MediaPlayer mp,int what,int extra){
if(isAdded()){
停止音频();
}
longToast(上下文,getString(R.string.error\u load\u msg));
返回false;
}
});
player.setOnPreparedListener(新的MediaPlayer.OnPreparedListener(){
@凌驾
已准备好公开作废(MediaPlayer mp){
退刀颜色(2);
}
});
player.setOnCompletionListener(新的MediaPlayer.OnCompletionListener(){
@凌驾
完成时的公共作废(MediaPlayer mp){
停止音频();
sendPostMessageRead(新回调。SendPostMessageReadCallback(){
@凌驾
public void sendpostmessageradcallback(布尔gotMessageReadResponse){
if(gotMessageReadResponse){
MessageLog message=log.get(listPosition);
message.setMessageStatus(“读取”);
if(message.isReply()){
currentMetaTextView.setText(“”);
MyFcmListenerService.newMessages--;
ShortcutBadger.applyCount(上下文,MyFcmListenerService.newMessages);
}
}否则{
d(Log_标记,“sendpostmessageradcallback返回false,可能发生错误”);
}
}
});
}
});
player.setAudioStreamType(AudioManager.STREAM_MUSIC);
试一试{
//Uri=Uri.parse(Keys.getpvmURL()+“android/retrieveMessage?messageId=“+params[0]);
//player.setDataSource(参数[0].replaceFirst(“https”、“http”);
Uri=Uri.parse(参数[0]);
Map headers=newhashmap();
headers.put(“授权”,encryption.getID().toString());
setDataSource(上下文、uri、标题);
}捕获(IOE异常){
e、 printStackTrace();
停止音频();
}试一试{
player.prepare();
}捕获(IOE异常){
e、 printStackTrace();
停止音频();
}
player.start();
返回null;
}
}
这是列表项的clicklistener:
ListAdapter newAdapter = new ListAdapter(getActivity());
if (this.log == null) {
list.setAdapter(populateAdapter(newAdapter,new ArrayList<MessageLog>()));
} else {
list.setAdapter(populateAdapter(newAdapter,log));
}
list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Log.d(LOG_TAG, Integer.toString(position));
if (log != null && position < log.size()) {
if (!nowPlaying && log.get(position).getUrl() != null) {
try {
stopAudio();
setButtonColors(0, currentPlaying);
// Show the play controls.
currentPlaying = position;
nowPlaying = true;
player = new MediaPlayer();
player.setAudioStreamType(AudioManager.STREAM_VOICE_CALL);
listPosition = position;
currentButton = view;
Log.d(LOG_TAG, log.get(position).getUrl());
/*
MessagePlaybackDialogFragment playFrag = MessagePlaybackDialogFragment.newInstance(log.get(listPosition),
new Callbacks.OnPlaybackFinishedListener() {
@Override
public void onPlaybackDone() {
// TODO set as not new
}
});
playFrag.show(getFragmentManager(), "playFrag");*/
// MessagePlaybackDialogFragment playFrag = MessagePlaybackDialogFragment.newInstance(log.get(listPosition));
// playFrag.show(getFragmentManager(), "playFrag");
currentMetaTextView = (TextView) view.findViewById(R.id.voiceMessageMetaText);
currentPlayPauseImageView = (ImageView) view.findViewById(R.id.voiceMessagePlayPauseImage);
currentMessageBackground = (RelativeLayout) view.findViewById(R.id.voiceMessageRectangleBackground);
setButtonColors(1);
currentAudio = new PlayAudio().execute(log.get(listPosition).getUrl());
} catch (Exception e) {
stopAudio();
e.printStackTrace();
}
} else if (position == listPosition){
stopAudio();
} else if (nowPlaying){
stopAudio();
currentPlaying = position;
player = new MediaPlayer();
player.setAudioStreamType(AudioManager.STREAM_VOICE_CALL);
listPosition = position;
currentButton = view;
Log.d(LOG_TAG, log.get(position).getUrl());
currentMetaTextView = (TextView) view.findViewById(R.id.voiceMessageMetaText);
currentPlayPauseImageView = (ImageView) view.findViewById(R.id.voiceMessagePlayPauseImage);
currentMessageBackground = (RelativeLayout) view.findViewById(R.id.voiceMessageRectangleBackground);
setButtonColors(0, currentPlaying);
setButtonColors(1);
currentAudio = new PlayAudio().execute(log.get(listPosition).getUrl());
}
}
}
});
ListAdapter newAdapter=newlistadapter(getActivity());
if(this.log==null){
setAdapter(populateAdapter(newAdapter,newArrayList());
}否则{
setAdapter(populateAdapter(newAdapter,log));
}
list.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
Log.d(Log_标记,Integer.toString(位置));
if(log!=null&&positionmp.setAudioStreamType(AudioManager.STREAM_VOICE_CALL);
mp.setDataSource(a.getUrl());
mp.prepareAsync();
mp.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
activityList.get(position).setDuration(mp.getDuration()/1000);
holder.playButton.clearAnimation();
mp.start();
}
});