-1

スレッドを毎秒更新できるようにすると、閉じるたびにクラッシュする音楽プレーヤーを作成しました(更新は曲の経過時間とプログレスバーを更新するためのものです)。コードは次のとおりです。

/**
 * 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); //this line is causing errors
       }
    };

これはすべて、アクティビティ中に再び機能しますが、戻るボタンを押すとすぐにクラッシュします。何か案は?ありがとう

4

1 に答える 1

1

removeCallbacks()inonPause()または同様のメソッドを使用して、今後のコールバックを停止してみてください。

mHandler.removeCallbacks(mUpdateTimeTask);

毎秒スレッドの更新を有効にすると

コードを1秒に1回実行したいようですが、...を使用します。

// Running this thread after 100 milliseconds
mHandler.postDelayed(this, 100); //this line is causing errors

ハンドラーとランナブルはデフォルトでは新しいスレッドで作成されないこと、および100ミリ秒の遅延でコードが1秒間に10回実行されることを理解してください。

于 2012-12-28T21:38:48.853 に答える