2013-08-10 3 views
0

У меня есть метод, который бросает InvocationTargetException каждый раз сразу после вызова onPause. Это происходит на линии «long totalDuration = mp.getDuration()»; Как мне прекратить это исключение?Как приостановить фон Android Runnable?

/** 
* Background Runnable thread 
* */ 
private Runnable mUpdateTimeTask = new Runnable() { 
    public void run() { 
     long totalDuration = mp.getDuration(); 
     long currentDuration = mp.getCurrentPosition(); 

     // Displaying Total Duration time 
     songTotalDurationLabel.setText(""+utils.milliSecondsToTimer(totalDuration)); 
     // Displaying time completed playing 
     songCurrentDurationLabel.setText(""+utils.milliSecondsToTimer(currentDuration)); 

     // Updating progress bar 
     int progress = (int)(utils.getProgressPercentage(currentDuration, totalDuration)); 
     //Log.d("Progress", ""+progress); 
     songProgressBar.setProgress(progress); 

     // Running this thread after 100 milliseconds 
     mHandler.postDelayed(this, 100); 
    } 
}; 


@Override 
public void onPause(){ 
    super.onPause(); 
    if(mp != null){ 
     try{ 
     mp.stop();//mp=mediaplayer 
     mp.release(); 
     } catch(Exception e){ 
      Log.e(TAG, "Error in onPause()\n "); 
     } 
    } 

} 

ответ

3
// mHandler -> mHandler Handler instance 
// this  -> mUpdateTimeTask Runnable anonymous class 

mHandler.removeCallbacks(this); 

Не остановить мгновенно, но предотвратить следующий запланированный вызов.

1

Это происходит потому, что в вы вызываете mp.release(), что верно. Тем не менее, ваша задача по-прежнему пытается использовать ссылку на нее после этого момента. В вашем установите значение дозорного знака, которое указывает на отсутствие mUpdateTimeTask.

Где-то в классе:

boolean volatile sentinel = false;

Где-то в onResume:

sentinel = false; // need to reset the flag

Где-то в :

sentinel = true;

Затем в вашем mUpdateTimeTask проверьте sentinel, если это правда, не запускайте свой код и не отправляйте его. Затем вы можете выполнить его в onResume.

Смежные вопросы