音乐播放器-MainFragment分析4

上篇简述了MainButtonUIManager,涉及到public属性的handler,通过该handler能够频繁的更新UI,尤其是音乐播放的进度条,和音乐进行的时间。

代码较短,直接上了:

public class MusicTimer {
	
	public final static int REFRESH_PROGRESS_EVENT = 0x100;//256
	
	private static final int INTERVAL_TIME = 1000;
	private Handler[] mHandler;
	private Timer mTimer;
	private TimerTask mTimerTask;
	
	private int what;
	private boolean mTimerStart = false;

	public MusicTimer(Handler... handler) {
		//这种参数接受方式类似于Handler[] handler,响应的传入参数方式可以是MusicTimer(handler1,handler2,...)
		this.mHandler = handler;
		this.what = REFRESH_PROGRESS_EVENT;

		mTimer = new Timer();
	}
	/**
	 * 通过定时器执行定时任务
	 */
	public void startTimer() {
		if (mHandler == null || mTimerStart) {
			//此处应该抛出异常mHandler都为null了也就应该提示开发者代码调用错误,尽管执行不到这里
			return;
		}
		mTimerTask = new MyTimerTask();
		mTimer.schedule(mTimerTask, INTERVAL_TIME, INTERVAL_TIME);//第二和第三个参数是多少秒后执行和多少秒重复执行task
		mTimerStart = true;
	}
	/**
	 * 调用TimerTask的cancel()方法结束任务
	 */
	public void stopTimer() {
		//当任务开始才可以结束
		if (!mTimerStart) {
			return;
		}
		mTimerStart = false;
		if (mTimerTask != null) {
			mTimerTask.cancel();
			mTimerTask = null;
		}
	}
	
	class MyTimerTask extends TimerTask {

		@Override
		public void run() {
			if (mHandler != null) {
				//一个高级for循环,遍历所有的handler并发送消息,这里只有一个handler,what并没有在handler处有用
				for (Handler handler : mHandler) {
					Message msg = handler.obtainMessage(what);
					msg.sendToTarget();
				}
			}
		}
		
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值