文章标题

来源:互联网 发布:cpu多核编程 编辑:程序博客网 时间:2024/06/05 00:35

1.服务

主类:IntentService

主函数:
onCreate() :
HandlerThread thread.start(); 处理任务的子线程
mServiceHandler = new ServiceHandler( thread.gerLooper ); 附着在子线程上 负责处理任务逻辑的一个handler

内部类:ServiceHandler

内部函数:
ServiceHandler(Looper): 构造函数,根据Looper创建handler
handlerMessage(msg):
onHandlerIntent(msg.obj): 虚函数,在主类里面实现它,处理Intent的任务(重要)
stopSelf(msg.arg1)

主类主函数:
然后再onStart()里面 对intent进行获取与初步处理
onStart(Intent intent, int startId) :

msg.obj = intent;
msg.arg1 = startId;
sendMessage(Msg);

主类主函数:onHandlerIntent

(以上是 android.app.IntentService源码)
注意:1. Service不是独立的线程或者进程,它依赖于主线程,不要写耗时操作在里面
2.这里讲的Service是本地服务,远程服务则运行在飞主线程内.
3.Service与activity通信 有两种: 一种IBinder 一种broadcast广播(可能不严谨)
参考这里: https://segmentfault.com/a/1190000002400391

2.广播

这里用广播进行通信

广播很简单,我在service里面注册广播1,activity里面 触发暂停,开始按钮时候就发送广播 sendBroadcast(intent) 出去.注意这里的intent提前在广播1注册时候祖册进去.
还有就是activity里面需要实时更新seekbar,这时候就需要双广播,也就是在activity注册广播2.需要实时的将MediaPlayer的进度发送给activity.这时候就考虑了摒弃广播来写播放器.

思路2.

MediaPlayer 一个子线程
seekbar.lyricView一个线程

两个线程的handler都在main 线程里面创建,自然的就没有了 通信的烦恼.

以上只做工作笔记.

Android 实现音乐播放器
1. MediaPlayer和seekbar 同步
2. 歌词和seekbar同步
3. 暂停时候:拖动seekbar,歌词同步滑动

0 0
原创粉丝点击