Android 应用程序在计算媒体文件的持续时间时挂起

Android 应用程序在计算媒体文件的持续时间时挂起,android,android-asynctask,android-mediaplayer,Android,Android Asynctask,Android Mediaplayer,我试图计算媒体文件的持续时间,并在检索时更新列表。 我使用asyncTask来计算持续时间。 但应用程序在计算大小之前会一直挂起。为什么会这样?有更好的方法吗 我的异步任务是:- ew LongOperation.executemFileMang.getCurrentDir+/+mDataSource.getposition }AsyncTask不应用于长时间操作,时间不得超过2到3秒。 我不知道情况是否如此,但由于您将任务称为LongOperation,我认为它运行的时间更长 你可以找到更多关

我试图计算媒体文件的持续时间,并在检索时更新列表。 我使用asyncTask来计算持续时间。 但应用程序在计算大小之前会一直挂起。为什么会这样?有更好的方法吗

我的异步任务是:- ew LongOperation.executemFileMang.getCurrentDir+/+mDataSource.getposition


}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) {
     }