Android 应用程序在计算媒体文件的持续时间时挂起
我试图计算媒体文件的持续时间,并在检索时更新列表。 我使用asyncTask来计算持续时间。 但应用程序在计算大小之前会一直挂起。为什么会这样?有更好的方法吗 我的异步任务是:- ew LongOperation.executemFileMang.getCurrentDir+/+mDataSource.getpositionAndroid 应用程序在计算媒体文件的持续时间时挂起,android,android-asynctask,android-mediaplayer,Android,Android Asynctask,Android Mediaplayer,我试图计算媒体文件的持续时间,并在检索时更新列表。 我使用asyncTask来计算持续时间。 但应用程序在计算大小之前会一直挂起。为什么会这样?有更好的方法吗 我的异步任务是:- ew LongOperation.executemFileMang.getCurrentDir+/+mDataSource.getposition }AsyncTask不应用于长时间操作,时间不得超过2到3秒。 我不知道情况是否如此,但由于您将任务称为LongOperation,我认为它运行的时间更长 你可以找到更多关
}AsyncTask不应用于长时间操作,时间不得超过2到3秒。 我不知道情况是否如此,但由于您将任务称为LongOperation,我认为它运行的时间更长
你可以找到更多关于它的信息那么我应该用什么呢?这取决于你到底想做什么。是一个视频还是1000个?你也在下载它们吗?我想我已经描述过了。你应该使用调试器或日志步骤逐步完成它,这样你就可以准确地知道它挂起的位置。在这一点上,更明显的原因是什么。乍一看,代码看起来不错。
private class LongOperation extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... params) {
MediaPlayer mp = MediaPlayer.create(mContext, Uri.parse(params[0]));
long duration = mp.getDuration();
mp.reset();
mp.release();
String finalTimerString = "";
String secondsString = "";
String minutesString = "";
// Convert total duration into time
int hours = (int)( duration / (1000*60*60));
int minutes = (int)(duration % (1000*60*60)) / (1000*60);
int seconds = (int) ((duration % (1000*60*60)) % (1000*60) / 1000);
// Add hours if there
if(hours > 0){
finalTimerString = hours + ":";
}
// Prepending 0 to seconds if it is one digit
if(seconds < 10){
secondsString = "0" + seconds;
}else{
secondsString = "" + seconds;}
if(minutes < 10){
minutesString = "0" + minutes;
}else{
minutesString = "" + minutes;}
duration_video = finalTimerString = finalTimerString + minutesString + ":" + secondsString;
return null;
}
@Override
protected void onPostExecute(String result) {
//might want to change "executed" for the returned string passed into onPostExecute() but that is upto you
}
@Override
protected void onPreExecute() {
}
@Override
protected void onProgressUpdate(Void... values) {
}