android音乐播放器Service的生命周期分析
来源:互联网 发布:飞鹰网络电视安卓 编辑:程序博客网 时间:2024/05/22 00:31
在android音乐播放器的源码中,启动播放Service的源码先使用了startService, 然后又使用了bindService, 代码如下:
public static ServiceToken bindToService(Activity context, ServiceConnection callback) { Activity realActivity = context.getParent(); if (realActivity == null) { realActivity = context; } ContextWrapper cw = new ContextWrapper(realActivity); cw.startService(new Intent(cw, MediaPlaybackService.class)); ServiceBinder sb = new ServiceBinder(callback); if (cw.bindService((new Intent()).setClass(cw, MediaPlaybackService.class), sb, 0)) { sConnectionMap.put(cw, sb); return new ServiceToken(cw); } Log.e("Music", "Failed to bind to service"); return null; }
使用startService可以保证在音乐播放Activity退出后播放音乐的服务仍继续运行,而bindService则保证了Activity能够和Service进行交互。
1. 使用startService启动服务的生命周期方法:
使用这种方法启动一个Service,在Service启动后该Service和启动该Service的Activity就没有关系了。但是这种发放启动的Service不能和Activity进行交互。
通常情况下使用startService调用的Service生命周期方法为:onCreate()->onStartCommand()。
其中多次调用startService只调用一次onCreate(), 但可以多次调用onStartCommand().
当服务需要退出时,调用stopService,就会调用Service的onDestroy()方法。
2.使用bindService启动服务的生命周期方法:
使用这种方法启动的Service是和调用者Activtiy同生命的,当Activtiy退出时,服务也同时销毁了。这种方法启动的Service能够和Activity进行交互。
调用bindService启动服务,Service生命周期方法为:onCreate()->onBind()
多次调用bindService并不会多次调用onBind(), 即onCreate()和onBind()都是只被调用一次。
当Activity退出是,该Service销毁,调用:onUnbind()->onDestroy();
3. 综合以上两点,在音乐播放器的源码中先调用startService再调用bindService()调用的Service生命周期方法顺序为:
onCreate()->onStartCommand()->onBind().
此时如果没有播放音乐,就退出Activity,调用的方法为:
onUnbind()->onDestroy();
如果第一次启动音乐播放器后播放了一首音乐,在播放的过程中退出Activity, 此时调用的方法为:
onUnbind();
这种情况下只是解除了Activity与Service之间的绑定,Service仍再后台运行继续播放音乐。
此时再运行播放器程序,调用的方法为:
onStartCommand()->onRebind();
这里调用onStartCommand()容易理解,调用onRebind()的原因是在onUnbind()发放中返回了true, 返回true表示当服务再次被绑定时调用服务的onRebind()方法。
此时停止播放,并退出播放器程序,调用的方法为:
onUnbind();
此方法是马上调用的,系统并没有马上调用Service的onDestroy()方法,但是过了大约1分钟后又调用了Service的onDestroy()方法。从设置中查看正在运行的服务也可以验证这一点,在音乐播放器在无播放状态下退出后,刚开始音乐播放器服务仍然存在,大概1分钟后该服务就不存在了。这点是为什么我也没有弄明白,为什么在onUnbind()之后没有马上调用onDestroy(),而是在过了一段时间之后才调用onDestroy(), 难道是android系统自己发现是一个空服务,就把他销毁了,有谁知道原因是什么,希望大家告诉我下,谢谢!
- android音乐播放器Service的生命周期分析
- Android-Service (基本知识,生命周期,实例-startService 启动的服务音乐播放器后台服务播放)
- Android-Service (基本知识,生命周期,实例-startService 启动的服务音乐播放器后台服务播放)
- Android的音乐播放器使用service
- android-service音乐播放器
- Android Service 音乐播放器
- android 音乐播放service
- Android Service播放音乐
- 初学Android,使用Service的音乐播放器(七十二)
- Android Service的使用方法 音乐播放器实例
- [Android]结合MediaPlayer和Service的音乐播放器
- Android开发之基于Service的音乐播放器
- Android开发之基于Service的音乐播放器
- Android Service的使用方法 音乐播放器实例
- Android Service的使用方法 音乐播放器实例
- android 四大组件service 音乐播放器的实现
- 【Android】基于Service组件的简易音乐播放器
- [Android]结合MediaPlayer和Service的音乐播放器
- java发送邮件
- 在Windows7下从硬盘安装 Redhat5.4 方法
- 笔试 sizeof 字节对齐 结构体
- 在red hat linux 5上安装oracle 11g
- Linux Utils API Reference Guide
- android音乐播放器Service的生命周期分析
- 手机的几种定位方式
- 设计模式笔记之适配器模式(Adapter Pattern)
- NFS
- How to Delete Process Chain Logs in SAP BW?
- 复制互联网——2010全球最值得模仿的230个网站
- VC精确计时(转)
- flex 生命周期学习
- java发送短信