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

时间:2013-10-10 13:17:58

标签: android android-asynctask android-mediaplayer

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

我的异步任务是: -     ew LongOperation().execute(mFileMang.getCurrentDir()+"/" + mDataSource.get(position));

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

}

1 个答案:

答案 0 :(得分:-2)

AsyncTask不应该用于长时间操作(不超过2到3秒)。 我不知道是不是这样,但是因为你调用了你的任务LongOperation,我认为它的运行时间更长。

您可以找到有关它的更多信息Here