android 更新歌曲播放进度条seekbar的三种方法
来源:互联网 发布:win7网络共享无法打开 编辑:程序博客网 时间:2024/05/02 06:45
总结了一下更新歌曲播放进度条seekbar的三种方法
1. 只使用handler来进行更新
2. 使用计时器Timer+TimerTask
3. 使用线程池ExecutorService
2. 使用计时器Timer+TimerTask
3. 使用线程池ExecutorService
实现后的效果图:
下面详细讲一下三种做法
方法一 使用handler来更新进度条
点击播放按钮,在播放按钮的点击事件中添加此行代码
handler.sendEmptyMessage(UPDATE); //发送Message
然后在handleMessage()方法中的UPDATE信息下每间隔0.5秒发送Message来不断刷新seekbar
@Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what) { case MUSICDURATION: seekbar.setMax(playService.getDuration()); break; case UPDATE: try { seekbar.setProgress(playService.getMediaPlayer().getCurrentPosition()); } catch (Exception e) { e.printStackTrace(); } //handler.sendEmptyMessageDelayed(UPDATE); handler.sendEmptyMessageDelayed(UPDATE,500); break; } }
方法二 使用计时器Timer+TimerTask
创建一个Timer对象和TimeTask对象,TimerTask实现了Runnable接口,所以创建时要重写run方法private TimerTask timertask = new TimerTask() { @Override public void run() { try { if (playService.getMediaPlayer() != null && playService.isPlaying == true) { handler.sendEmptyMessage(UPDATE); } } catch (Exception e) { e.printStackTrace(); } } };
在ServiceConnection中的onServiceConnected()方法的最后调用schedule()方法,启动计时器,开始执行timertask,这样保证了playService一定在子线程里获取到之后才开始更新主线程UI,不会有空指针报错问题,schedule(TimerTask task,long delay,long period)方法在delay毫秒后开始执行,每隔period毫秒后执行下一次动作
@Override public void onServiceConnected(ComponentName name, IBinder service) { PlayService.PlayBinder playBinder = (PlayService.PlayBinder) service; playService = playBinder.getPlayService(); handler.sendEmptyMessage(MUSICDURATION); timer.schedule(timertask, 0, 500); //executeservice.execute(updateRunnable); }
方法三 使用线程池ExecutorService
创建一个ExecutorService对象,一个updateRunnable对象
private ExecutorService executeservice = Executors.newSingleThreadExecutor(); //创建一个单线程化的线程池
private Runnable updateRunnable = new Runnable() { @Override public void run() { while (true) { try { if (playService.getMediaPlayer() != null && playService.isPlaying == true) { handler.sendEmptyMessage(UPDATE); } Thread.sleep(500); } catch (InterruptedException e) { // TODO: handle exception } } } };
这样保证了playService一定在子线程里获取到之后才开始更新主线程UI,不会有空指针报错问题
@Override public void onServiceConnected(ComponentName name, IBinder service) { PlayService.PlayBinder playBinder = (PlayService.PlayBinder) service; playService = playBinder.getPlayService(); handler.sendEmptyMessage(MUSICDURATION); executeservice.execute(updateRunnable); }
demo是在android studio上面写的,打包文件太大,就直接打包核心文件给大家
核心文件下载链接:http://pan.baidu.com/s/1c16JN3a
核心文件下载链接:http://pan.baidu.com/s/1c16JN3a
1 0
- android 更新歌曲播放进度条seekbar的三种方法
- 同步歌曲与seekbar进度条
- Android自带Music播放器更新播放时间和进度条的方法
- Android-SeekBar进度条的使用
- Android中ProgressBar、RatingBar、SeekBar三种进度条的区别(十一)
- 我的Android进阶之旅------>Android如何通过自定义SeekBar来实现视频播放进度条
- Android(进度条)异步更新UI的三种方式
- Android仿虾米音乐播放器之自定义进度条seekbar
- 【Android】Android开发实现进度条效果,SeekBar的简单使用。音量,音乐播放进度,视频播放进度等
- Android两种播放视频的方法(SurfaceView+MediaPlayer+SeekBar)跟(VideoView+MediaController)
- AndroidStudio音乐播放器进度条和歌曲时间的操作
- Android学习之使用seekbar进行歌曲的同步
- 使用SurfaceView+Medaplayer+SeekBar完成视频的播放加进度条
- Android 视频播放的三种方法
- android 自定义进度条 seekbar
- android 自定义进度条 seekbar
- Android-SeekBar(拖动进度条)
- Android--进度条--ProgressBar--SeekBar
- C++第6次博客
- 第七届 科技节 电子设计大赛 二等奖作品---无线温度监测系统设计
- LightOJ 1348 Aladdin and the Return Journey(树链剖分)
- javascript中数组的foreach函数
- ROS_Kinetic_10 ROS程序基础Eclipse_C++(一)
- android 更新歌曲播放进度条seekbar的三种方法
- ping和tcpdump
- SAPUI5
- 排序算法之冒泡排序
- 2014年 蓝桥杯决赛(Java)
- MySql使用DATE_FORMAT对日期进行格式化
- 科技节编程大赛三等奖作品——谢明轩
- 记数排序
- POJ1840(哈希)