我正在嘗試更新關於MediaPlayer中歌曲進度的seekbar。 我正在使用線程來完成這項任務。無法使用Handler更新seekbar
首先,我已經使用了Thred內部線程並嘗試更新UI,但它使應用程序崩潰並且說只有原始線程可以附加到視圖。
然後,我嘗試使用線程runnable中的處理程序更新它。這工作正常,但它並沒有更新seekbar。當我做了日誌,然後我知道循環不會在我的處理程序中進行。我不知道問題在哪裏。請幫我更新SeekBar。
代碼:
private Runnable mUpdateTimeTask = new Runnable() {
public void run() {
try {
if ((musicPath != mIRemoteService.getPath())) {
System.out.println("..... MUSIC CHANGE.....");
setOrUpdateData();
updateFragmentLayout();
}
// Displaying Current Duration time/Progress
new Handler().post(new Runnable() {
@Override
public void run() {
try {
songCurrentDurationLabel.setText(""+ Utilities.milliSecondsToTimer(mIRemoteService.position()));
songProgressBar.setProgress((int)mIRemoteService.position());
System.out.println("Runnnnn.........");
//songProgressBar.invalidate();
} catch (RemoteException e) {
e.printStackTrace();
System.out.println("Runnnnn......... EXCEPTION....");
}
}
});
System.out.println("Runnnnn.........MAIN....");
if (!(mIRemoteService.isPlayerRunning())) {
btnPlay.setImageDrawable(getResources().getDrawable(R.drawable.play_now_playing));
mHandler.removeCallbacks(mUpdateTimeTask);
System.out.println("Runnnnn.........MAIN....IF");
}else{
System.out.println("Runnnnn.........MAIN....ELSE");
mHandler.post(mUpdateTimeTask);
}
} catch (Exception e) {
e.printStackTrace();
}
}
};
你得到任何形式的錯誤?如果沒有放置一些日誌,看看代碼的流程是什麼,如果它被卡住或者沒有輸入if語句 – 2014-12-03 06:18:42
@GoranHoriaMihail如果我使用Thread來代替Handler,那麼我得到錯誤「只有創建的原始線程視圖層次結構可以觸及其視圖。「 – 2014-12-03 06:45:19
是的,你不能觸及除UI線程以外的其他線程的任何視圖。處理程序將在UI線程上發佈修改,這就是爲什麼它的工作原理,是的你應該使用處理程序。現在使用處理程序時出現什麼錯誤/問題? – 2014-12-03 06:59:45